Java Selenium 多表结构,遍历所有

标签 java loops selenium xpath selenium-webdriver

我有一个表,其中的行位于另一个表的一行中,该表有很多行(其他表有行)。

哇。这很令人困惑。让我把它放在你面前!

.//*[@id='chatComponent']/div/swx-navigation
/div/div/div/div[2]/div[1]/div/ul/li[*]/div/ul/li[*]

第一个表和行从这里开始:

 firstTable = /div/div/div/div[2]/div[1]/div/ul/li[*]

第二个表和行从这里开始:

 secondTable = firstTable/div/ul/li[*]

这是我的代码,我正在尝试如何 System.out.print 表中的所有每个项目(位于第一个表中)

    List<WebElement> liElements = driver.findElements(By
            .xpath(".//*[@id='chatComponent']/div/swx-navigation/div/div/div/div[2]/div[1]/div/ul/li[*]"));
    List<WebElement> liElements2 = driver.findElements(By
            .xpath(".//*[@id='chatComponent']/div/swx-navigation/div/div/div/div[2]/div[1]/div/ul/li[*]/div/ul/li[*]"));

    System.out.println(liElements.size());
    System.out.println(liElements2.size());

    for (int i = 1; i < liElements.size()+1; i++) {
    if (i < liElements.size() ){
        WebElement linkElement = driver
                .findElement(By
                        .xpath(".//*[@id='chatComponent']/div/swx-navigation/div/div/div/div[2]/div[1]/div/ul/li[1]/div/ul/li[" + i + "]"));
        System.out.println(linkElement.getText());
    } else if (i == liElements.size()){
         WebElement linkElement2 = driver
                    .findElement(By
                            .xpath(".//*[@id='chatComponent']/div/swx-navigation/div/div/div/div[2]/div[1]/div/ul/li[*]/div/ul/li[" + i + "]"));
        System.out.println(linkElement2.getText());
        }
    }

现在的问题是,它将迭代第一个表,直到没有更多对象可供查找,然后抛出错误,但它不会移动到下一个表以在那里打印对象。它只是说“确定”,打印了该表中的所有元素,但继续在同一个表中查找其他不存在的元素并失败。

我想问一下,我怎样才能实现这个目标?

非常感谢任何帮助。

最佳答案

您应该遵循以下算法:

  1. 通过迭代查找外部(第一个)表中的所有行。
  2. 从外表中的每一行中,找到每个内表中的行并迭代内表行。

    // find all the rows in the outer table
    List<WebElement> outerLIElementList = driver.findElements(
            By.xpath(".//*[@id='chatComponent']/div/swx-navigation/div/div/div/div[2]/div[1]/div/ul/li"));
    
    System.out.println(outerLIElementList.size());
    
    // iterate through the rows in the outer element
    for (WebElement outerLIElement : outerLIElementList) {
    
        // find the inner table rows using the outer table row
        List<WebElement> innerLIElementList = outerLIElement.findElements(By.xpath("//div/ul/li[*]"));
    
        // iterate through the inner table rows and sysout
        for (WebElement innerLIElement : innerLIElementList) {
            System.out.println(innerLIElement.getText());
        }
    }
    

关于Java Selenium 多表结构,遍历所有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35115032/

相关文章:

java - Android Studio 启动失败,出现 "Exception in thread "main"java.lang.NoClassDefFoundError : javax. swing.UIManager"

javascript - 对数组进行排序,并将重复项插入新数组

javascript - android 上的酱错误 "Selenium::WebDriver::Error::UnsupportedOperationError: underlying webdriver instance does not support javascript"

java - Unix 中的 Chrome Headless 返回空页面源

java - 超链接下拉列表

java - Vertx http 服务器仅使用一个工作线程实例

jquery - 可滚动问题

python - 在字典列表中查找键值,然后替换其他值

python - 如何使用 cssSelector :nth-child(n) to locate element in Python Selenium

java - 受密码保护的 Excel 文件