使用 Selenium WebDriver 处理日期选择器

Handling Date picker using Selenium WebDriver

我的网页中有两个日期选择器,分别是开始日期和结束日期。我需要点击两个日期,但是当我搜索元素时,会调用相同的元素。但是有一个独特的元素 name.How 我可以调用这些元素吗?

日期选择器 1 HTML 代码:-

<span>Start Date:</span>
<input id="courseStartDate" class="date-range required hasDatepicker" type="text" size="20" value="" onchange="startDateChanged()" name="courseStartDate">
<img class="ui-datepicker-trigger" src="../../images/Calender.png" alt="..." title="...">

日期选择器 2 HTML 代码:-

<span>End Date:</span>
<input id="courseEndDate" class="date-range required hasDatepicker" type="text" size="20" value="" onchange="endDateChanged()" name="courseEndDate">
<img class="ui-datepicker-trigger" src="../../images/Calender.png" alt="..." title="...">

首先,img 标签不是 input 标签的子标签,而是紧随其后的标签 - 兄弟标签。此外,在您的第 5 次尝试中,您试图引用 imgalt 属性,因此您应该写 @alt 而不是 alt.

我建议使用 class 属性而不是 alt,如下所示:

1) 开始日期

(.//*[@id='courseStartDate']/following-sibling::img[@class='ui-datepicker-trigger'])[1]

2) 结束日期

(.//*[@id='courseEndDate']/following-sibling::img[@class='ui-datepicker-trigger'])[1]

查看 here 了解更多关于 following-siblings 和 xpath 轴的一般信息。

您可以使用 List:

处理 日期选择器
  1. 获取table的所有值用于 List
  2. 循环并将 List 的元素与输入进行比较:
List<WebElement> yearList = driver
   .findElement(By.xpath("/html/body/div[3]/div[3]/table/tbody"))
   .findElements(By.tagName("span"));

for (int i = 0; i < yearList.size(); i++) {
  if (yearList.get(i).getText().equalsIgnoreCase(date_dd_MM_yyyy[2])) {
    
    yearList.get(i).click();
    System.out.println("Year found successfully..");
    break;
  } else if (i == yearList.size()) {
    System.out.println("Year not found.");
  }
}

详细教程见以下博客-post: Selenium JAVA Automation Tips & Tricks