【问题标题】:how to perform action on WebElement list in Selenium如何对 Selenium 中的 WebElement 列表执行操作
【发布时间】:2019-07-17 13:46:39
【问题描述】:

无法遍历 WebElement 列表

你好

我正在 Departure 下对 https://www.makemytrip.com/ 执行一些操作。当点击出发时,它将显示两个月的日历。

我能够得到两个具有相同 xpath 的 webElements,如下所述,现在我要一个一个去,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

请指导我如何对每个元素逐个执行任何操作。

【问题讨论】:

  • 请参考附图。

标签: java selenium selenium-webdriver xpath


【解决方案1】:

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

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

Absolute vs relative XPaths (/ vs .)

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

【讨论】:

    【解决方案2】:

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

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

    P.S. 我怀疑你的 Xpath,你写的 xpath 是整个月历(即月份名称、日期、每个日期的价格,所以它是你选择的整个 div )

    请尝试

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

    【讨论】:

      【解决方案3】:

      您可以尝试使用,

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

      存储在 Webelements 列表中后,您可以使用不同类型的 for 循环来获取文本。但最好的选择是 forEach 循环和迭代循环。

      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.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-17
        • 1970-01-01
        • 2018-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多