首页 > 解决方案 > 如何从产品的类别列表页面中提取文本作为 Xpath 并将其添加到 Selenium Java 中的列表中

问题描述

我正在尝试在这样的类别列表页面上选择每个产品的名称(例如:https ://www.prana.com/women/clothing/tops.html#page=1 )

我有一个通过 Xpath 的 for 循环,但它不断返回错误 - “Xpath”是 [object Text] 它应该是一个元素。哪个是对的。我的问题是如何获取文本?我已经看了一遍,但似乎找不到正确的答案——这就是我现在所拥有的。

List<WebElement> allElements = driver.findElements(By.xpath("//*[@id=\"root-wrapper\"]/div/div/div[3]/div/div[4]/div[2]/div[3]/ul/li[1]/a/h2/text()")); 
for(int i=0; i <allElements.size(); i++) {
   allElements = driver.findElements(By.xpath("//*[@id=\"root-wrapper\"]/div/div/div[3]/div/div[4]/div[2]/div[3]/ul/li["+i+"]/a/h2/text()")); 
}

System.out.println(Integer.toString(allElements.size()));
   for (WebElement element: allElements) {
      System.out.println((element).getText());

所以我希望它继续下去,直到不再有这些“元素”(文本),然后为我列出它们。

任何帮助将不胜感激。

我确实在这里看到了与 href 类似的东西:使用 selenium java 在几页的产品列表中迭代

我要看看我是否可以用

driver.findElements(By.className(".product-name *then enter a blank variable here*" );

标签: javalistseleniumselenium-webdriverwebdriverwait

解决方案


text()在 XPath 中用于匹配 TextNode。HTML 中除了 TextNode 之外,还有 ElementNode 和 AttributeNode。

但是对于 selenium,它只能找到/返回 ElementNode,您可以使用 XPath 中 TextNode 的显示文本来匹配您想要的 ElementNode,但不能要求 selenium 返回 TextNode。

因此删除text()xpath 末尾的 ,然后调用getText()api ofWebElement来获取元素的文本。


推荐阅读