如何选择此span元素?

Mic*_*hel 5 selenium selenium-webdriver

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

<span class=" close">Matrices</span>
Run Code Online (Sandbox Code Playgroud)

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

ReadOnlyCollection<IWebElement> matrixLink = driver.FindElements(By.PartialLinkText("Matrices"));
Run Code Online (Sandbox Code Playgroud)

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

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

Arr*_*ran 8

这将有效:

//*[@id=\"Navigation\"]/descendant::span[text()='Matrices']
Run Code Online (Sandbox Code Playgroud)

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

//div[@id=\"Navigation\"]/descendant::span[text()='Matrices']
Run Code Online (Sandbox Code Playgroud)

对这个XPath的一个简单解释是它将抓取Navigation元素,并简单地查看其中的任何位置以找到span具有文本的元素Matrices.没有descendantXPath中的位,它只会搜索直接子节点.这意味着,一个子元素Navigation,没有别的-所以,如果一个元素是一个孩子的TestDiv这是一个孩子Navigation,descendant就抓住它,没有它,你将不会返回任何结果.

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

By.PartialLinkText并且同样By.LinkText不会'看到'这个元素,因为它不是一个锚元素.