Java 检测selenium中(嵌套)的最内层web元素
当页面中存在类似的嵌套WebElement时,我希望获得页面中最内部的web元素 考虑下面的例子:Java 检测selenium中(嵌套)的最内层web元素,java,selenium,recursion,Java,Selenium,Recursion,当页面中存在类似的嵌套WebElement时,我希望获得页面中最内部的web元素 考虑下面的例子: <body> <table id="level1"> <tr> <td> <table id="level2"> <tr> <td>
<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.findElements按标记“table”搜索时,其中包含一些文本-“Test”
我将总共得到5个WebElement,即-“level1”、“level3”、“level1\u table2”、“level2\u table2”
我想要实现的是拥有一个满足我的搜索条件的最内层(嵌套)元素的列表
所以我应该得到的列表应该只有两个WebElement,即-“level3”和“level2\u table2”。
我正在寻找一些可能在递归线上的东西。有人能帮我吗。我会使用以下策略:
Test
table
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);
List elementsWithTest=driver.findElements(By.xpath(“/*[contains(text(),'Test')]”);
列表结果=新建ArrayList();
for(WebElement元素:elementsWithTest){
WebElement parent=element.findElement(By.xpath(“…”);
而(!“table”.equals(parent.getTagName())){
parent=parent.findElement(By.xpath(“..”);
}
if(“table.equals(parent.getTagName())){
结果。添加(父级);
}
}
系统输出打印项次(结果);
希望这会有所帮助。您不需要递归-您需要的一切都是正确的XPath表达式:
没有给出预期的结果result@RahulRaina你什么意思?它返回2个元素:“level3”和“level2_table2”。是的,它应该返回,但它返回6个元素。你能给我(WebElement e:result){System.out.println(e.GetTaName()+“”+e.getAttribute(“id”)+“”+e.getText();}的
输出吗?在我的情况下,它的工作预期。
driver.findElements(By.xpath("table[not(.//table)]"))