如何选择此span元素?

时间:2013-02-08 08:28:05

标签: selenium selenium-webdriver

我刚开始使用Selenium,现在需要选择这个元素:

<span class=" close">Matrices</span>

这行代码返回零元素,所以我猜它不是正确的: - )

ReadOnlyCollection<IWebElement> matrixLink = driver.FindElements(By.PartialLinkText("Matrices"));

但除了Xpath之外我找不到另一个合适的,但看起来像这样(//*[@id=\"Navigation\"]/div[2]/div[2]/ul/li[7]/span),这对我来说似乎有点脆弱?

修改: 跨度有“关闭”类。 这是一个菜单的一部分,其中有19个跨度的类'close'所以它不是一个独特的选择器,不幸的是....

3 个答案:

答案 0 :(得分:8)

这将有效:

//*[@id=\"Navigation\"]/descendant::span[text()='Matrices']

请注意,如果可以,请在XPath查询中具体说明,主要是为了提高可读性并提高性能......您查询中的*将查询所有元素。页。我不知道导航元素是什么类型的元素,但你应该把它的确切元素类型放入其中,例如,如果它是一个div,请使用它:

//div[@id=\"Navigation\"]/descendant::span[text()='Matrices']

对此XPath的一个轻微解释是,它将获取Navigation元素,只需在其中的任何位置查看 即可找到文本为{的span元素{1}}。如果没有XPath中的Matrices位,它只会搜索直接子项。这意味着descendant的孩子的元素,没有别的 - 所以如果一个元素是Navigation的孩子,TestDiv的孩子,Navigation会抓住它,它不会返回任何结果。

至于为什么descendant不起作用,这只会搜索锚链接。正如您所见,常见的是,锚链接在其中包含By.PartialLinkText元素,或者有时它只是span

span并且类似By.PartialLinkText不会'看到'此元素,因为它不是锚元素。

答案 1 :(得分:2)

我最喜欢的问题解决方案:

  • 安装Selenium IDE
  • 点击您需要的链接
  • 在Selenium IDE的“目标”中,您将看到不同的xpath可能性

但我会使用这种方法,它的第N个元素带有“close”类(//span[7]或类似的东西)

答案 2 :(得分:2)

你可以使用// span [text()='Matrices'] 它会选择你的元素。