我在使用WebDriver中的xpath定位某个元素时遇到问题。以下是我的方法:
场景1:
下面找到所有主要元素的' href'包含提供的价值。使用这种方法,我能够找到38个元素。同意。按预期工作。 driver.findElements(By.xpath("//a[contains(@href,'http://www.holidayiq.com/hotels/')]"));
场景2:我首先找到一个名为' Rank-bar'只有一次。然后,我使用相同的xpath来定位此类中的所有锚标记。预期的锚标签是4但是,我仍然使用这种方法找到38个元素。
WebElement elements2 = driver.findElement(By.className("rank-bar"));
elements2.findElements(By.xpath("//a[contains(@href,'http://www.holidayiq.com/hotels/')]"));
我在这里做错了什么?请帮忙。
答案 0 :(得分:1)
你应该像这样构建一个直接的xpath:
//*[@class='rank-bar']//a[contains(@href, 'http://www.holidayiq.com/hotels')]
如你所见,你使用了包含,这意味着你也可能有:
//*[@class='rank-bar']//a[contains(@href, 'holidayiq.com/hotels')]
从一步中找到元素,如:
driver.findElements(By.xpath("//*[@class='rank-bar']//a[contains(@href, 'holidayiq.com/hotels')]"));
答案 1 :(得分:0)
实际上,您再次在整个文档上下文中查找anchor
元素,这就是您找到相同内容的原因。
如果您想在anchor
上下文中搜索elements2
元素,you need to search with .//
xpath
如下: -
elements2.findElements(By.xpath(".//a[contains(@href,'http://www.holidayiq.com/hotels/')]"));
或者您可以使用cssSelector
在线上找到相同的内容,如下所示: -
List<WebElement> allLinks = driver.findElements(By.cssSelector(".rank-bar a[href*='http://www.holidayiq.com/hotels/']"));