如何以Xpath形式从产品的类别列表页面中提取文本,并将其添加到Selenium Java中的列表中
我试图在一个类别列表页面上选择每个产品的名称,如下所示(例如:https://www.prana.com/women/clothing/tops.html#page=1)
我有一个for循环遍历Xpath,但它不断返回错误——“Xpath”是[objecttext],它应该是一个元素。这是正确的。我的问题是我如何获得文本?我已经找遍了,但似乎找不到正确的答案——这就是我现在的答案
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类似的内容:iteration in product list of several pages with selenium java
我要看看我是否能用
driver.findElements(By.className(".product-name *then enter a blank variable here*" );
# 1 楼答案
您可以创建一个包含所需元素的列表,该列表包含所有元素的可见性的WebDriverWait,并在循环中提取所需的文本,您可以使用以下解决方案:
代码块:
控制台输出:
# 2 楼答案
XPath中的
text()
用于匹配TextNode。除了TextNode,HTML中还有ElementNode和AttributeNode但对于selenium,它只能查找/返回ElementNode,您可以使用XPath中TextNode的显示文本来匹配您想要的ElementNode,但不能要求selenium返回TextNode
因此,删除xpath末尾的
text()
,然后调用WebElement
的getText()
api来获取元素的文本