我正在寻找在页面中获得最内部的web元素,当页面中有类似的嵌套web元素时。
考虑下面的例子:
<body>
<table id="level1">
<tr>
<td>
<table id="level2">
<tr>
<td>
<table id="level3">
<tr>
<td>
<p>Test</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
<table id="level1_table2">
<tr>
<td>
<table id="level2_table2">
<tr>
<td></td>
</tr>
</table>
</td>
</tr>
</table>
</body>
所以当我在Driver页面上进行搜索时。通过标签"table"查找元素,并且有一些文本-"Test",
我将得到5个webelement,即- "level1", "level3" , "level1_table2" , "level2_table2"
我想要实现的是有一个最内层(嵌套)元素的列表,满足我的搜索条件。
所以我应该得到的List应该只有2个webelement即- "level3" and "level2_table2".
我正在寻找一些可能在递归行。谁能帮我一下?
您不需要递归-您需要的只是正确的XPath表达式:
driver.findElements(By.xpath("table[not(.//table)]"))
我会使用以下策略:
- 搜索包含
Test
文本的web元素 - 对于每个WebElement搜索第一个匹配标签名称为
table
的父元素
Java:
List<WebElement> elementsWithTest = driver.findElements(By.xpath("//*[contains(text(),'Test')]"));
List<WebElement> result = new ArrayList<>();
for(WebElement element : elementsWithTest) {
WebElement parent = element.findElement(By.xpath(".."));
while (! "table".equals(parent.getTagName())) {
parent = parent.findElement(By.xpath(".."));
}
if ("table".equals(parent.getTagName())) {
result.add(parent);
}
}
System.out.println(result);
希望对你有帮助。