首页 > 解决方案 > 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帖子中搜索?

标签: javaselenium

解决方案


您的问题出在 XPath 表达式中。Java 文档有明确的描述:

使用 xpath 时,请注意 webdriver 遵循标准约定:以“//”为前缀的搜索将搜索整个文档,而不仅仅是当前节点的子节点。使用“.//”将您的搜索限制在此 WebElement 的子项中。


推荐阅读