Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于findElements的列表循环是如何工作的?_Java_Selenium_Xpath - Fatal编程技术网

Java 基于findElements的列表循环是如何工作的?

Java 基于findElements的列表循环是如何工作的?,java,selenium,xpath,Java,Selenium,Xpath,列表中的第一个元素很简单,因为您可以使用find元素。我找到元素,需要从前面和后面的div中获取信息。对于列表中的“n”元素,用于移动/向后移动到其他相关div的xPath语法是什么 我尝试了各种x路径以下语法,例如: following-sibling::div /following-sibling::div ./following-sibling::div 还有很多其他的。我只是没有找到正确语法的文档。前面的: 选择当前节点之前的所有节点,如下图所示 以下兄弟姐妹: 选择上下文节点的以

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

我尝试了各种x路径以下语法,例如:

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

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

前面的

选择当前节点之前的所有节点,如下图所示

以下兄弟姐妹

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

您可以通过示例找到正确的语法


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

如果您将java与css结合使用,则最好使用for循环

driver.findElements(由.cssSelector(“以下同级”)


//。查找所有div

此答案完全取决于您试图自动执行的页面上显示的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())
}
//找到要迭代的元素
List elements_to_iterate=driver.findElements(By.xpath(someLocatorHere))
//迭代foreach循环中的元素
for(WebElement元素:元素到元素迭代){
//获得前兄弟姐妹
WebElement preference\u element=element。通过\u xpath(“./preference sibling::div”)查找\u element\u
打印(在元素.getText()之前)
//获得以下兄弟姐妹
WebElement following\u element=element.find\u element\u by\u xpath(“./following sibling::div”)
打印(在\u元素.getText()之后)
}

正如我提到的,这只是一个通用的解决方案,让您了解这将如何工作。如果您需要定位器策略方面的帮助,发布HTML会很有帮助。

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

请参考上面的截图,我正试图从谷歌获得两个突出显示按钮的标签

      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();
    }

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

对于(i=1;i}

您可能需要发布您正在使用的HTML来帮助我们回答此问题。如果没有HTML引用,很难将此问题可视化。用于迭代元素的代码示例也会有所帮助。
Element Text::Google Search
Element Text::I'm Feeling Lucky