java - Selenium Webdriver 在 Web 元素中查找 Web 元素
问题描述
我有一些代码可以找到所有元素,我们称它们为 FB 帖子,它们具有特定的 XPath。
然后我在 for 循环中遍历这些。假设其中有 20 个。
对于这 20 个元素中的每一个。它们内部还有另一个元素,我们称它为“点赞”按钮。
因此,当我遍历 FB 帖子时。我应该能够选择任何 FB 帖子元素。然后在里面搜索Like按钮。通过它的 xPath
// Get FB posts
List<WebElement> fbPostsList = driver.findElements(By.xpath("//div[contains(@data-pagelet,'FeedUnit')]"));
// Loop through all FB posts we can see
for (WebElement element : fbPostsList) {
// Find like button based on FB post element
List<WebElement> likeLocations = element.findElements(By.xpath("//div[@aria-label='Like']"));
// Loop through elements
for (WebElement likeLocationsElement : likeLocations) {
System.out.println(likeLocationsElement.getLocation());
}
}
上面的代码应该正是这样做的。但是,我发现的是like 按钮的第二个“findElements”。基本上是列出每一个喜欢的按钮。假设窗口中有 20 个 FB 帖子。它将列出 20 个喜欢按钮。
由于我选择了单个 FB 帖子元素。在第一个 for 循环内。然后做一个“findElements”,我应该只在那个特定元素或FB帖子中搜索?
解决方案
您的问题出在 XPath 表达式中。Java 文档有明确的描述:
使用 xpath 时,请注意 webdriver 遵循标准约定:以“//”为前缀的搜索将搜索整个文档,而不仅仅是当前节点的子节点。使用“.//”将您的搜索限制在此 WebElement 的子项中。
推荐阅读
- javascript - 如何使用 Parsley Js 逐一验证表单字段
- android - seekbar 值的对讲?
- javascript - 如何使用javascript绑定数据以通知js
- javascript - Electron js按钮单击不起作用
- java - Java 转换成双精度
- swift - iOS 应用使用 GoogleMaps 崩溃:NSInvalidUnarchiveOperationException 无法实例化名为 MKMapView 的类
- javascript - 如何摆脱这个页面闪烁?
- javascript - Mac 平台 Safari 和 Chrome 浏览器中画布旋转后无法显示 emoji 表情
- c++ - 聚合初始化中的异常
- android - 运行时异常无法启动活动