如何使用Selenium WebDriver从日历中选择日期

时间:2019-07-11 07:03:35

标签: java selenium selenium-webdriver webdriver webdriverwait

我是Selenium webdriver的新手。我正在使用Java编程语言。

我的问题是我无法调用日历元素并选择其中的日期。

这里是链接:

https://www.veltra.com/en/asia/malaysia/kuala_lumpur/a/139387

非常感谢您的帮助。

List<WebElement> allDates=driver.findElements(By.xpath("//table[@class='ui-datepicker-calendar']//td"));

        for(WebElement selectDate:allDates)
        {       
            String date=selectDate.getText();

            if(date.equalsIgnoreCase("31"))
            {
                selectDate.click();
                break;
            }

        }

我计划的是,单击“立即预订”按钮后,我想在日历中选择31st July。日期将显示在文本框中。

2 个答案:

答案 0 :(得分:1)

有效日期的文本不仅是日期,还包含价格。例如,对于7月31日,文本为31\nUSD 266.67

您可以使用startsWith()

if (date.startsWith("31")) {
    selectDate.click();
    break;
}

或使用指向日期本身的定位符

By.xpath("//table[@class='ui-datepicker-calendar']//td//span")

答案 1 :(得分:0)

要从日历上为第一项选择日期 31 ,您需要为elementToBeClickable()诱导 WebDriverWait ,您可以使用以下{{3 }}:

  • 代码块:

    WebDriver driver = new ChromeDriver(options);
    driver.get("https://www.veltra.com/en/asia/malaysia/kuala_lumpur/a/139387");
    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='hltitle clearfix fclear price_note_wrapper']//following::a[2]"))).click();
    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='hltitle clearfix fclear price_note_wrapper']//following::a[starts-with(@id, 'book_now_btn_')][1]//following::table[1]//input[starts-with(@name, 'data')]"))).click();
    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//table[@class='ui-datepicker-calendar']//span[text()='31']"))).click();
    
  • 浏览器快照:

Locator Strategies