简体   繁体   English

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

[英]Selenium how to get all elements inside a WebElement

I'm trying to get all the elements inside a selenium WebElement , for example:我正在尝试获取 selenium WebElement所有元素,例如:

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

</div>

I want to get a list of all the elements inside including child elements, like so...我想得到一个包含子元素在内的所有元素的列表,就像这样......

  1. div div
  2. element元素
  3. header标题
  4. paragraph段落
  5. element元素
  6. paragraph段落

So I've tried this所以我试过这个

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

but this would return only但这只会返回

  1. element元素
  2. element元素

So then I tried a recursive method to get all of the childs然后我尝试了一种递归方法来获取所有孩子

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>());
}

But querying findElements() takes too long但是查询findElements()花费的时间太长

I'm thinking there must be a xpath way, but I can't seem to find it我想一定有一个xpath方式,但我似乎找不到它

We can use WebElement.findElements method to get list of all the elements inside element.我们可以使用WebElement.findElements方法来获取元素内所有元素的列表。

For above HTML, to get list of all elements present inside div, we can use below code:对于上面的 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());

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM