gpt4 book ai didi

java - WebDriver (Java) - 使用 driver.findElements() 时排除表下的元素

转载 作者:行者123 更新时间:2023-11-30 11:15:53 24 4
gpt4 key购买 nike

我正在使用 WebDriver 编写代码来查找页面给定区域(也可以是整个页面本身)上特定类型的所有元素。

假设我的页面是这样的

<div id='mydiv'>
<a href='#' id='mylink_1'>Link 01</a>
<a href='#' id='mylink_2'>Link 02</a>
<span>Enter your name</span>
<input type='text' id='txtName' value=''/>
<div id='mytable'>
<table id='mytableelement'>
<tr>
<td><a href='#' id='table_link_1'>Table Link 1</a></td>
<td><input type='text' id='table_text_1' value=''/></td>
</tr>
<tr>
<td><a href='#' id='table_link_2'>Table Link 2</a></td>
<td><input type='text' id='table_text_2' value=''/></td>
</tr>
<tr>
<td><a href='#' id='table_link_3'>Table Link 3</a></td>
<td><input type='text' id='table_text_3' value=''/></td>
</tr>
</table>
</div>
</div>

现在,我的要求是,比方说,获取 div“mydiv”下的所有链接。

所以,我写了这样的代码

WebElement myDiv = driver.findElement(By.id("mydiv"));
List<WebElement> links = myDiv.findElements(By.tagName("a"));

这将返回“mydiv”下的 All 链接,这很好。但是,我想排除出现在 table 标签下的链接,即 ID 为“table_link_1”、“table_link_2”、“table_link_3”的链接。

为了实现这一点,我做了以下事情

ArrayList<WebElement> finalLinks =  new ArrayList<WebElement>();
WebElement myDiv = driver.findElement(By.id("mydiv"));
List<WebElement> links = myDiv.findElements(By.tagName("a"));
for(WebElelemnt link:links){
try{
WebElement containingtable = link.findElement(By.xpath("ancestor::table[1]"));
System.out.println("Element occurs inside a table. So, skip it");
}
catch(Exception e){
finalLinks.add(link);
}
}

这似乎也有效,但唯一的问题是,如果表包含 1000 行,那么它会循环 1000 个链接,只是跳过它们。这显然会影响性能。

是否有更快的方法跳过表格下方的链接?

注意:这里的表格只是一个例子。我可能想跳过一个特定的 div 或一组嵌套的 div。

有没有一种通用的方法可以做到这一点?

谢谢,斯里拉姆

最佳答案

我知道的唯一方法是使用 xpath 表达式。

尝试

WebElement myDiv = driver.findElement(By.id("mydiv"));
List<WebElement> links = myDiv.findElements(By.xpath("./a"));

这应该只返回您想要的链接(div 的直接子级)。

例如 xpath 表达式“./tbody/tr”将只匹配“当前”表的表行,嵌套表的行将被忽略。

关于java - WebDriver (Java) - 使用 driver.findElements() 时排除表下的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25132605/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com