如何基于findElements遍历列表?

时间:2019-11-14 16:01:20

标签: java selenium xpath

列表中的第一个很容易,因为您可以使用find元素。我找到了该元素,需要从之前和之后的div中获取信息。对于列表中的“ n”元素,用于向后/向后移动到其他关联的div的xPath语法是什么?

我尝试了如下x路径,例如:

following-sibling::div 
/following-sibling::div 
./following-sibling::div

还有许多其他。我只是没有找到正确语法的文档。

5 个答案:

答案 0 :(得分:0)

上一个

选择当前节点之前的所有节点,如下屏幕所示。

关注对象

选择上下文节点的以下同级。兄弟姐妹与当前节点处于同一级别,如以下屏幕所示。它将在当前节点之后找到该元素。

Here,您可以找到包含示例的正确语法。

您也可以使用drive.findElements();方法来查找相似的元素。它将返回您可以迭代以获取信息的元素的集合。

答案 1 :(得分:0)

如果您将Java与CSS结合使用,我会说最好使用for循环

  

driver.findElements(By.cssSelector(“。following-sibling”));

//。查找所有div

答案 2 :(得分:0)

此答案完全取决于您要自动执行的页面上显示的HTML。

在这种情况下,我只能提供一个通用的答案,但是这是我如何遍历元素列表并从div的前/后获取信息的方法:

// locate the elements you want to iterate
List<WebElement> elements_to_iterate = driver.findElements(By.xpath(someLocatorHere))

// iterate the elements in a foreach loop
for (WebElement element : elements_to_iterate) {

    // get preceding sibling
    WebElement preceding_element = element.find_element_by_xpath("./preceding-sibling::div")
    print(preceding_element.getText())

    // get following sibling
    WebElement following_element = element.find_element_by_xpath("./following-sibling::div")
    print(following_element.getText())
}

正如我提到的,这只是一个通用解决方案,可让您了解其工作方式。如果您想对定位器策略有所帮助,则发布HTML将很有帮助。

答案 3 :(得分:0)

如果要查找多个元素,请查找以下示例供参考。根据您的站点,您需要实现相同的逻辑。

enter image description here

请参考上面的屏幕截图,其中我正试图从Google获取两个突出显示的按钮的标签

13.0
4
1       SQLCHAR             0       7       ","      1     PersonID               ""
2       SQLCHAR             0       25      ","      2     FirstName              SQL_Latin1_General_CP1_CI_AS
3       SQLCHAR             0       30      ","      3     LastName               ""
4       SQLCHAR             0       11      "\r\n"   4     BirthDate              ""

输出:

      public static void main(String[] args) throws InterruptedException {
        System.setProperty("webdriver.chrome.driver", "chromedriver.exe");

        WebDriver driver = new ChromeDriver();
        driver.get("https://www.google.com"); // URL in the browser
        driver.manage().window().maximize(); // Maximize the browser

        String expectedTooltip="Search";

       List<WebElement> Listelements  = driver.findElements(By.xpath("//div[@class='FPdoLc VlcLAe']//input"));


        for (WebElement element: Listelements)
        {
            System.out.println("Element Text::"+element.getAttribute("aria-label"));
        }

        driver.close();
    }

答案 4 :(得分:0)

因为第一个很容易;每个elementList都有一个当前时间和至少一张图片

for(i = 1; i