我想每行迭代表格,在我的测试场景中,我会为每一行查找某个数据。我已经通过使用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;
}
对此有何想法?非常感谢任何投入,谢谢!
答案 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。