【问题标题】:Selenium WebDriver - how to get elements of tables and iterate through rowsSelenium WebDriver - 如何获取表的元素并遍历行
【发布时间】:2016-02-12 08:37:29
【问题描述】:

我想每行迭代表,在我的测试场景中,我将为每行查找特定数据。我已经通过使用 Absolute Xpath 做到了这一点。除了使用 Absolute Xpath 遍历这些行之外,还有其他更好/替代方法吗?

这是我之前代码的逻辑:

private static int iRow;

WebElement sWorkUnitRows = null;

for (iRow = 1; iRow <= 10; iRow++) {

sWorkUnitQuery = driver.findElement(By.Xpath("html/body/div[2]/div[4]/div/div/div[3]/div[1]/table/tbody/tr["+ iRow + "]/td[5]/div"));

// Do some actions here, click and verify data for each rows until it finds the specific data

break;

}

对此有什么想法吗?非常感谢任何输入谢谢!

【问题讨论】:

    标签: java html selenium-webdriver


    【解决方案1】:

    您可以使用findElements(...) 代替findElement(...)

    这是一个例子:

    List<WebElement> elements = driver.findElements(By.Xpath(".//*/tr/td[5]/div"));
    for(WebElement element:elements){
         ...
    }
    

    这将返回位于每行第 5 列的所有 divs 的列表。

    【讨论】:

    • 您好,感谢您的回复,是否有另一种方法可以使用表格的绝对 xpath 获取元素?
    • @user3713453 您可以使用相对 XPath,例如 .//*/table/tbody/tr/td[5]/div 或其他可用的 By 之一。
    【解决方案2】:

    第一: 如果您可以将 ID 放在您感兴趣的元素上,那是最好和最快的选择。最重要的是,只要维护 ID,就可以在不中断测试的情况下进行界面更改。

    您的问题: 我会推荐 driver.findElements(),但通常会建议在有其他选项时不要使用 XPath。

    在这种情况下,我会使用By.CssSelector 来查找元素。比如:

    "tbody.listTbody tr"
    

    然后从返回的 Web 元素列表中的每个项目中提取数据。我猜如果你正在寻找你可能不需要一直到 div 的数据。只需获取该行的文本,然后如果您找到与您的数据匹配的内容,请使用 div。你一开始就避免检查 div。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多