我正在尝试查找所有锚元素的列表,这是我在搜索结果中得到的。
当我尝试使用CSS时:
List<WebElement> anchors = driver.findElements(By.cssSelector("ul a"));
我收到了很多结果。
当我尝试使用XPATH时:
By.xpath("/html/body/div[2]/div[1]/header/div/form/div[2]/div/div[4]/ul/a[1]
我只得到一个。
我需要所有这些。
答案 0 :(得分:0)
所以你想要的是获取建议列表中的所有链接。我假设你想忽略CATEGORIES链接,只获得产品链接。
有几种方法可以解决这个问题。一种方法是找到具有ID的UL
...它是页面上唯一的(当前)。您可以使用下面的CSS选择器。这是寻找包含任何ID的任何A
的直接后代的所有UL
。
ul[id] > a
另一种方式,也许更安全,是不依赖于UL
是页面上唯一具有ID的UL
这一事实。我们可以使用容器为建议下拉列表找到这些元素,然后在A
中找到UL
。作为建议下拉列表容器的DIV
是
<div class="clerk-live-search-container" id="__clerk-2-318441846" style="...">
每次ID都会改变,所以我们不能依赖它。页面上还有许多以__clerk
开头的ID,因此我们也无法使用它。这个DIV
确实有一个唯一的类class="clerk-live-search-container"
,所以我们可以使用它。我们可以从此DIV
开始,然后找到包含我们想要的所有UL
的{{1}}。 CSS选择器位于下方。
A
两个选择器都在上面工作,但我可能会使用第二个,因为我认为它不太可能在未来中断。
答案 1 :(得分:0)
看起来所有主要元素的href都以&#34; / products ...&#34;开头,如果有,请尝试使用此xpath:
By.xpath("//a[starts-with(@href, '/products')]")
答案 2 :(得分:0)
您也可以使用:
textViewA
答案 3 :(得分:0)
首先获取所有锚元素并将它们保存在WebElement
列表中。然后在循环中使用getAttribute("href")
找到链接地址。你可以使用如下:
List<WebElement> allAnchors = driver.findElements(By.cssSelector("div.clerk-live-search-container > div > ul > a"));
for (WebElement eachAnchorElem : allAnchors) {
String link = eachAnchorElem.getAttribute("href");
//System.out.println(link);
}
您可以用来保持String array
或list
答案 4 :(得分:0)
让我们分析您的代码试验发生了什么:
当你尝试:
List<WebElement> anchors = driver.findElements(By.cssSelector("ul a"));
您返回 133 匹配节点,因为找到<a>
后跟<ul>
的{{1}}标记已添加到List
。我们实际上并不需要这样做。
当你尝试:
By.xpath("/html/body/div[2]/div[1]/header/div/form/div[2]/div/div[4]/ul/a[1]
由于xpath
是一个absolute xpath
,其索引为[1]
,因此您只能获得一个元素。
在cetaphi
内输入 Search Box
文字后,您会在View Port
内找到 7 搜索结果。要获取Search Results
中所有锚元素的列表,您可以使用以下代码块:
List<WebElement> anchors = driver.findElements(By.xpath("//div[@class='clerk-livesearch-title' and contains(text(),'Products')]//following::a/div[@class='clerk-live-item']//div/p"));
for (WebElement ele:anchors)
System.out.println(ele.getAttribute("innerHTML"));
注意:某些其他
div
和ul
id
属性设置为 {{1} } ,__clerk-1-442699327
等,它们似乎是动态的。因此必须避免这些。