You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 19:55:18