无法遍历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
请指导我如何在每个元素上一一执行。
答案 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
。