英文:
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());
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论