Selenium WebDriver - 如何获取表的元素并遍历行

时间:2016-02-03 00:43:13

标签: java html selenium-webdriver

我想每行迭代表格,在我的测试场景中,我会为每一行查找某个数据。我已经通过使用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;

}

对此有何想法?非常感谢任何投入,谢谢!

2 个答案:

答案 0 :(得分:1)

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

以下是一个例子:

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

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

答案 1 :(得分:1)

<强>第一: 如果您可以获得您感兴趣的元素的ID,那么这是最好和最快的选择。最重要的是,只要维护ID,就可以在不破坏测试的情况下进行界面更改。

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

在这种情况下,我会使用By.CssSelector来查找元素。类似的东西:

"tbody.listTbody tr"

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