如何对Selenium中的WebElement列表执行操作

时间:2019-07-12 11:59:48

标签: java selenium selenium-webdriver xpath

无法遍历WebElement列表

我正在出发的https://www.makemytrip.com/上采取一些措施。单击出发时,它将显示两个月的日历。

我能够获得两个具有相同xpath的webElement,如下所述,现在我要一个一个地去,并getText()与用户月份名称匹配。

List<WebElement> month_list= driver.findElements(By.xpath("//div[@class='DayPicker-Month']"));

ListIterator<WebElement> listIter= month_list.listIterator();

while(listIter.hasNext()) {

WebElement elem= listIter.next();

System.out.println(elem.findElement(By.xpath("//div[@class='DayPicker-Caption']/div")).getText());

}

但是每次都会报告相同的文本:

July 2019
July 2019

但是,我希望它会报告:

July 2019 
August 2019

请指导我如何在每个元素上一一执行。

enter image description here

3 个答案:

答案 0 :(得分:1)

您应尝试在第二.中使用/而不是xpath,如下所示:-

System.out.println(elem.findElement(By.xpath("./div[@class='DayPicker-Caption']/div")).getText());

Absolute vs relative XPaths (/ vs .)

  • /引入了一个绝对位置路径,从文档的根部开始。
  • .引入了一个从上下文节点开始的相对位置路径。

答案 1 :(得分:0)

您可以使用 foreach循环。试试下面的代码

for(WebElement monthName: month_list)
    System.out.println(monthName.getText())

PS 我怀疑您的Xpath,您编写的xpath是整个月历(即月份名称,日期,每个日期的价格,因此是您选择的整个div )

请尝试

List<WebElement> month_list= driver.findElements(By.xpath("//div[@class='DayPicker-Caption']"));

答案 2 :(得分:0)

您可以尝试使用,

List<WebElement> monthname= driver.findElements(By.xpath("//div[@class='DayPicker-Caption']"));

存储在Webelements列表中之后,可以使用不同类型的for循环获取文本。但是,最好的优先选择是“每个循环”和“迭代循环”。

forEach循环:

for(WebElement months: monthname)
{
    System.out.println(months.getText())
}

常规循环

int length= monthname.size();

for (int i = 0; i<length; i++) 
{
    String name = monthname.get(i);
    System.out.println(name);

}

PS: But The Best Preference is to go with forEachLoop Rather than General For Loop