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

Selenium Java中遍历WebElement列表重复获取相同文本的问题

Selenium Java中遍历WebElement列表重复获取相同文本的问题

我来帮你排查下这个问题的根源——其实是你写的XPath没有限定搜索范围导致的!

你现在用的是//div/b这个XPath表达式,当你在一个WebElement对象上调用findElement()时,以//开头的XPath会忽略当前元素的上下文,直接从整个HTML文档的根节点开始搜索。所以哪怕你在遍历不同的product元素,每次都会找到页面上第一个匹配//div/b的元素,也就是第一个产品的「Mobile Phone」,自然就输出两次相同的结果了。

解决方法很简单:把XPath改成相对路径

只需要在XPath开头加个.,表示「从当前元素的上下文开始搜索」,修改后的代码如下:

for (WebElement product : products) {
    System.out.println(product.findElement(By.xpath(".//div/b")).getText());
}

如果想要定位更精准,避免页面其他地方的相同结构干扰,还可以结合元素的层级写更具体的XPath,比如直接定位到产品标题所在的h5标签下的b元素:

for (WebElement product : products) {
    System.out.println(product.findElement(By.xpath(".//h5[@class='card-title d-flex justify-content-between']/div/b")).getText());
}

你之前已经验证过products列表里是两个完全不同的元素,所以只要修正XPath的搜索范围,就能正确输出「Mobile Phone」和「Testing」这两个不同的产品标题啦!


内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 10:14:53