Estoy usando JavaScript para el selector de fechas en Selenium. Mi código se ejecuta correctamente pero la fecha no está seleccionada en el selector de fechas.
public class SpicJetBooking { static WebDriver driver; public static void main(String[] args) throws InterruptedException { ChromeOptions options = new ChromeOptions(); options.addArguments("--disable-notifications"); System.setProperty("webdriver.chrome.driver","C:\\Downloads\\chromedriver.exe"); driver = new ChromeDriver(options); driver.manage().window().maximize(); driver.manage().deleteAllCookies(); driver.manage().timeouts().pageLoadTimeout(Duration.ofSeconds(10)); driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)); driver.get("https://www.spicejet.com/"); System.out.println("Site Opened"); Thread.sleep(3000); driver.findElement(By.xpath("//div[contains(text(),'round trip')]")).click(); // driver.findElement(By.xpath("//div[@data-testid='return-date-dropdown-label-test-id']")).sendKeys("Wed, 23 Mar 2022"); // WebElement element = driver.findElement(By.xpath("//div[contains(text(),'Return Date')]")); WebElement element = driver.findElement(By.xpath("//div[@data-testid='return-date-dropdown-label-test-id']")); // element.click(); String datVal = "Wed, 23 Mar 2022"; selectDateByJS(driver, element, datVal); System.out.println("Complete Execution"); } public static void selectDateByJS(WebDriver driver,WebElement element, String datVal){ JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript("argument[0].setAttribute('value','"+datVal+"');", element); // String scriptVal = "arguments[0].setAttribute('value','\"+datVal+\"')"; // String scriptVal = "arguments[0].setAttribute('value','12-Mar-2022')"; // js.executeScript(scriptVal, element); System.out.println("JS Executed"); } }Me referí a Selección de la fecha del calendario de JavaScriptExecutor en selenium , pero en mi opinión, el selector de fecha ha cambiado y esto no funciona ahora
Lo intenté:
$x("(//div[text()='Return Date'])/following-sibling::div/child::div")[0].innerText = 'Wed, 23 Mar 2023'y me funciona bien. Entonces necesitas usar:
(//div[text()='Return Date'])/following-sibling::div/child::div** xpath as a locator and update your **selectDateByJSlínea de método donde realiza js
js.executeScript("argument[0].innerText="+datVal, element);Código completo:
public class SpicJetBooking { static WebDriver driver; public static void main(String[] args) throws InterruptedException { ChromeOptions options = new ChromeOptions(); options.addArguments("--disable-notifications"); System.setProperty("webdriver.chrome.driver","C:\\Downloads\\chromedriver.exe"); driver = new ChromeDriver(options); driver.manage().window().maximize(); driver.manage().deleteAllCookies(); driver.manage().timeouts().pageLoadTimeout(Duration.ofSeconds(10)); driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)); driver.get("https://www.spicejet.com/"); System.out.println("Site Opened"); Thread.sleep(3000); driver.findElement(By.xpath("//div[contains(text(),'round trip')]")).click(); WebElement element = driver.findElement(By.xpath("(//div[text()='Return Date'])/following-sibling::div/child::div")); String datVal = "Wed, 23 Mar 2022"; selectDateByJS(driver, element, datVal); System.out.println("Complete Execution"); } public static void selectDateByJS(WebDriver driver,WebElement element, String datVal){ JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript("argument[0].innerText="+datVal, element); System.out.println("JS Executed"); } }