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
相关产品推荐
相关产品推荐

