我如何选择这个跨度元素?

2024-04-24

我刚刚开始使用 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),这对我来说似乎有点脆弱?

EDIT: 跨度的类别为“close”。 它是菜单的一部分,其中有 19 个带有“close”类的跨度,因此不幸的是它不是一个唯一的选择器......


这将起作用:

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

请注意,如果可以的话,请在 XPath 查询中具体化,主要是为了提高可读性并提高性能……这就是*在您的查询中将查询all页面中的元素。不知道是什么元素导航元素是,但你应该输入它的确切元素类型,例如如果它是一个 div,则将其设置为:

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

对这个 XPath 的一个简单解释是它会抓取Navigation元素,简单地看一下里面的任何地方找到一个span具有以下文本的元素Matrices。如果没有descendantXPath 中的位,它只会搜索直系子女。这意味着元素的子元素Navigation,没有别的 - 所以如果一个元素是TestDiv这是一个孩子Navigation, descendant会抓住它,没有它你将不会返回任何结果。

至于为什么By.PartialLinkText不起作用,这只会搜索锚链接。正如您所看到的,锚链接具有span它们内部的元素,或者有时它只是一个span在其自己的。

By.PartialLinkText和类似地By.LinkText不会“看到”这个元素,因为它不是锚元素。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我如何选择这个跨度元素? 的相关文章

随机推荐