java - 如何从产品的类别列表页面中提取文本作为 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*" );
解决方案
text()
在 XPath 中用于匹配 TextNode。HTML 中除了 TextNode 之外,还有 ElementNode 和 AttributeNode。
但是对于 selenium,它只能找到/返回 ElementNode,您可以使用 XPath 中 TextNode 的显示文本来匹配您想要的 ElementNode,但不能要求 selenium 返回 TextNode。
因此删除text()
xpath 末尾的 ,然后调用getText()
api ofWebElement
来获取元素的文本。
推荐阅读
- angular - 如何检查角度6中的所有先前复选框
- php - 如何在 Laravel 5.4 中获取多选的价值
- python - Keras GRU/LSTM 层输入维度错误
- visual-c++ - 我们可以从 WINRT/头文件中生成 CPP 文件吗?
- javascript - 将内容从一个 div 拖放到另一个具有相同类名的可排序方式
- reactjs - 如何获取网页的全屏模式
- mysql - Mysql 将两行合并为一列
- laravel - 向作曲家添加卷后 Docker Windows 403 禁止访问
- python - 如何在 python 中使用 API 网关和 lambda 将 csv 文件上传到 AWS S3
- javascript - Javascript/CSS:文本字符串变长时淡化