为什么 Selenium 中的日期选择器(Spice Jet 应用程序使用 JavaScript)不获取属性值?

Why doesn't Date Picker in Selenium (using JavaScript for Spice Jet application) take attribute value?

我正在使用 JavaScript 作为 Selenium 中的日期选择器。我的代码运行成功,但日期选择器中没有选择日期。

    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");
    }
}

我确实提到了 ,但在我看来,日期选择器已经更改,现在无法正常工作

我试过了:

$x("(//div[text()='Return Date'])/following-sibling::div/child::div")[0].innerText = 'Wed, 23 Mar 2023'

对我来说效果很好。所以你需要使用:

(//div[text()='Return Date'])/following-sibling::div/child::div** xpath as a locator and update your **selectDateByJS

执行js的方法行

js.executeScript("argument[0].innerText="+datVal, element);

完整代码:

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");
}
}