为什么我必须通过xpath在Selenium中显式搜索相关元素?

时间:2016-11-08 11:14:38

标签: java selenium xpath webdriver

我尝试使用Selenium的WebDriver通过xpath查找元素:

WebElement element1 = driver.findElement(By.id("someID"));
List<WebElement> xPathElements = element1.findElements((By.xpath("//span[@class='someClass']")));

使用此代码,我可以使用class =&#39; someClass&#39;来获取所有元素。在DOM中。

只有当我添加&#34;。&#34;在xpath字符串的开头,我得到了所有带有class =&#39; someClass&#39;属于element1

element1.findElements((By.xpath(".//span[@class='someClass']")));

这里的意义是什么?我从findElements拨打了element1,因此默认情况下应该搜索element1下的元素,为什么我必须添加&#34;。&#34;?

2 个答案:

答案 0 :(得分:1)

它与Selenium无关,它是xpath的工作方式。

如果您有类似// elem xpath将位于文档中的任何位置。但是如果你想搜索一个相对于另一个元素或者后代的元素,那么你必须使用&#39;。&#39;或点像.//elem。

答案 1 :(得分:1)

. - 选择当前节点

// - 从当前节点中选择与选择匹配的文档中的节点,无论它们在何处。由于未指定当前节点,将在任何地方搜索。

所以.//意味着搜索当前节点内的所有地方。

在你的情况下:

//span[@class='someClass'] is //span[@class='someClass']

.//span[@class='someClass'] is element1//span[@class='someClass']

请参阅 - xpath syntax