我想获取id为J_goodsList的div下的li进行循环,然后获取p-name的内容,但是为什么每次循环获取的内容都是第一个元素的。
是xpath写的不对吗?代码如下
引自免费微信小程序:皆我百晓生
当然,我很乐意帮你解决这个问题。你提到的问题是在使用Selenium WebDriver时,通过findElements
方法获取一组元素后,在循环中始终只获取到第一个元素的文本内容。根据你的描述,你可能是这样写的:
@FindBy(xpath = "//*[@id='J_goodsList']/li")
List<WebElement> goodsListItems;
// ...
for (WebElement item : goodsListItems) {
String productName = item.findElement(By.xpath(".//p[@class='name']")).getText();
System.out.println(productName);
}
问题可能并不在于xpath表达式,而是每次循环中对每个WebElement
都执行了新的查找操作(即.findElement(By.xpath(".//p[@class='name']"))
)。这将导致每次都从当前遍历到的WebElement
内部重新查找第一个匹配的p.name
元素。
正确的做法是直接在找到的所有li
元素上获取对应的p.name
元素的文本。以下是修正后的代码示例:
@FindBy(xpath = "//*[@id='J_goodsList']/li")
List<WebElement> goodsListItems;
// 确保在页面加载完成后执行以下操作
public void printAllProductNames() {
for (WebElement item : goodsListItems) {
WebElement productNameElement = item.findElement(By.xpath(".//p[@class='name']"));
if (productNameElement != null) {
String productName = productNameElement.getText();
System.out.println(productName);
} else {
System.out.println("No product name found for this item.");
}
}
}
如果上述修正方案仍然不能解决问题,请确认HTML结构中确实存在多个具有相应类名或属性的p
元素,并且它们位于#J_goodsList
下的不同li
元素内。同时,确保页面已完全加载,所有元素均可见后再执行查找和循环操作。