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

Jos*_*pez 4 java selenium xpath selenium-webdriver

我试图获取 selenium 内的所有元素WebElement,例如:

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

</div>
Run Code Online (Sandbox Code Playgroud)

我想获取其中所有元素(包括子元素)的列表,就像这样......

  1. 分区
  2. 元素
  3. 标头
  4. 段落
  5. 元素
  6. 段落

所以我尝试过这个

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>());
}
Run Code Online (Sandbox Code Playgroud)

但查询时间findElements()太长

我想一定有办法xpath,但我似乎找不到

rah*_*rai 5

我们可以使用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());
Run Code Online (Sandbox Code Playgroud)