java - Selenium 如何获取 WebElement 中的所有元素

标签 java selenium selenium-webdriver xpath

我正在尝试获取 Selenium 中的所有元素 WebElement , 例如:

<div>
    <element>
        <header>header</header>
        <p>Paragraph</p>
    </element>
    <element>
        <p>Another Paragraph</p>
    </element>

</div>
我想得到一个包含子元素在内的所有元素的列表,就像这样......
  • div
  • 元素
  • 标题
  • 元素

  • 所以我试过这个element.findElements(By.xpath("*"))但这只会返回
  • 元素
  • 元素

  • 然后我尝试了一种递归方法来获取所有 child
    private static ArrayList<WebElement> getAllElements(WebElement element, ArrayList<WebElement> ret) {
        ret.add(element);
        List<WebElement> childs = element.findElements(By.xpath("*"));
        for(WebElement e: childs)
            getAllElements(e,ret);
        return ret;
    }
    private static List<WebElement> getAllElements(WebElement element) {
       return getAllElements(element,new ArrayList<WebElement>());
    }
    
    但是查询findElements()花费太长时间
    我想一定有一个 xpath方式,但我似乎无法找到它

    最佳答案

    我们可以使用 WebElement.findElements方法来获取元素内所有元素的列表。
    对于上面的 HTML,要获取 div 中存在的所有元素的列表,我们可以使用以下代码:

    // Get webelement for div tag
    WebElement element = driver.findElement(By.tagName("div"));
    
    // Below will return a list of all elements inside element
    List<WebElement> webEleList = element.findElements(By.xpath(".//*"));
    
    //For above given HTML it will print 5. As there are 5 elements inside div
    System.out.println(webEleList.size());
    

    关于java - Selenium 如何获取 WebElement 中的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63541972/

    相关文章:

    java - 如何使用 vert.x 在工作线程上应用并发处理

    java - Groovy GString 变量双重替换

    java - 是否可以读取同一个 xlsx 文件中不同工作表的数据?

    java - 如何按 POJO 属性降序排列列表?

    java - 使用 Java 和 selenium 的 css 选择器中的多个值

    java - 无法使用我知道 HTML 是使用 CSS 选择器构建的所有元素定位器来定位元素

    java - Selenium 根据文本或属性中的字符串查找元素

    java - Selenium 2 WebDriver NoClassDefFoundErrorS

    c# - 在 Safari 浏览器上使用 Selenium Webdriver 未选择下拉列表

    html - 如何使用 HTML 标签之间的文本来访问元素 - Selenium WebDriver