英文:
Selenium how to get all elements inside a WebElement
问题
我正在尝试获取Selenium的WebElement内的所有元素,例如:
<div>
    <element>
        <header>header</header>
        <p>Paragraph</p>
    </element>
    <element>
        <p>Another Paragraph</p>
    </element>
</div>
我想获取包括子元素在内的所有在<div>内的元素列表,就像这样...
- div
 - element
 - header
 - paragraph
 - element
 - paragraph
 
所以我尝试了这个:
element.findElements(By.xpath("*"))
但这只会返回:
- element
 - element
 
然后我尝试了一个递归方法来获取所有子元素:
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的方法,但我找不到它。
英文:
I'm trying to get all the elements inside a selenium WebElement, for example:
<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 <div> including child elements, like so...
- div
 - element
 - header
 - paragraph
 - element
 - paragraph
 
So I've tried this
element.findElements(By.xpath("*"))
but this would return only
- element
 - 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
I'm thinking there must be a xpath way, but I can't seem to find it
答案1
得分: 5
我们可以使用 WebElement.findElements 方法来获取元素内所有元素的列表。
对于上述的 HTML,要获取 <div> 内所有元素的列表,可以使用以下代码:
// 获取 <div> 标签的 WebElement
WebElement element = driver.findElement(By.tagName("div"));
// 下面的代码将返回元素内所有元素的列表
List<WebElement> webEleList = element.findElements(By.xpath(".//*"));
// 对于给定的 HTML,它将打印出 5。因为 <div> 内有 5 个元素
System.out.println(webEleList.size());
英文:
We can use WebElement.findElements method to get list of all the elements inside element.
For above HTML, to get list of all elements present inside div, we can use below code:
// 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());
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论