当我在页面中有类似的嵌套Webelements时,我正在寻找获取页面中最内层的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>
所以,当我通过标签“table”在Driver.findElements页面上搜索并且有一些文本 - “Test”时,
我将总共得到5个Web元素,即 - "level1", "level3" , "level1_table2" , "level2_table2"
我想要实现的是拥有满足我的搜索条件的最里面(嵌套)元素的列表。
所以我应该得到的列表应该只有2个Web元素 - "level3" and "level2_table2".
我正在寻找可能在递归线上的东西。有人可以帮助我。
答案 0 :(得分:0)
我会使用这个策略:
Test
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);
希望有所帮助。
答案 1 :(得分:0)
您不需要递归 - 您需要的是正确的XPath表达式:
driver.findElements(By.xpath("table[not(.//table)]"))