Java foreach循环中如何获取表格指定行单元格而非全部单元格?
解决表格指定行单元格获取问题
问题出在你的XPath表达式上:/child::td[@role='gridcell']开头的/会强制从文档根节点开始搜索,所以无论当前遍历的item是哪一行,都会返回整个页面中所有符合条件的td元素,而非当前行的子元素。
修正方案
你需要使用相对路径限定搜索范围为当前item节点的子元素,有几种写法可选:
- 直接省略开头的
/,查找当前节点的直接子元素:List<WebElement> cols = item.findElements(By.xpath("child::td[@role='gridcell']")); - 更简洁的写法,直接指定子元素(默认相对当前节点):
// 适用于td是item直接子节点的场景 List<WebElement> cols = item.findElements(By.xpath("td[@role='gridcell']")); - 如果td是当前节点的后代元素(非直接子节点),用
.明确表示从当前节点开始查找:List<WebElement> cols = item.findElements(By.xpath(".//td[@role='gridcell']"));
修正后的完整代码
private List<WebElement> reports; public List<WebElement> getReports(){ return Common.returnElementList(DriverFactory.getDriver(), reportsMenu, reports); } public Map<String, String> getReportDesc() { Map<String, String> temp = new HashMap<>(); for(WebElement item: getReports()){ // 获取当前行的直接子td元素 List<WebElement> cols = item.findElements(By.xpath("td[@role='gridcell']")); String key = Common.getElementText(DriverFactory.getDriver(), cols.get(0)); String desc = Common.getElementText(DriverFactory.getDriver(), cols.get(1)); temp.put(key, desc); } return temp; }
内容的提问来源于stack exchange,提问作者Sid
相关产品推荐
相关产品推荐

