【问题标题】:Selenium how to get all elements inside a WebElementSelenium 如何获取 WebElement 中的所有元素
【发布时间】:2020-12-11 23:14:25
【问题描述】:

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

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

</div>

我想获取里面所有元素的列表,包括子元素,就像这样......

  1. div
  2. 元素
  3. 标题
  4. 元素

所以我试过了

element.findElements(By.xpath("*"))

但这只会返回

  1. 元素
  2. 元素

然后我尝试了一种递归方法来获取所有孩子

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 方式,但我似乎找不到它

【问题讨论】:

  • find.Elements(By.xpath("//div") 将返回该 div 的所有元素
  • @ratsstack 这将返回页面的所有divs

标签: java selenium selenium-webdriver xpath


【解决方案1】:

我们可以使用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());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-18
    • 2021-12-25
    • 2023-04-03
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    相关资源
    最近更新 更多