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

标签 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),这对我来说似乎有点脆弱?

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

最佳答案

这会起作用:

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

请注意,如果可以的话,请在 XPath 查询中具体化,主要是为了提高可读性并提高性能...即查询中的 * 将查询全部页面中的元素。我不知道 Navigation 元素是什么类型的元素,但你应该输入它的确切元素类型,例如,如果它是 div,则将其设置为:

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

对此 XPath 的一个简单解释是,它将获取 Navigation 元素,并简单地查找内部任何位置来查找 span 元素其中包含Matrices 文本。如果 XPath 中没有 descendant 位,它只会搜索直接子级。这意味着元素是 Navigation 的子元素,仅此而已 - 因此,如果元素是 TestDiv 的子元素,而 TestDiv 又是 Navigation 的子元素,descendant 会捕获它,没有它你将不会返回任何结果。

至于为什么By.PartialLinkText不起作用,这只会搜索 anchor 链接。正如您所看到的, anchor 链接内部有一个 span 元素,或者有时它本身就是一个 span 元素,这是很常见的。

By.PartialLinkText 和类似的 By.LinkText 不会“看到”此元素,因为它不是 anchor 元素。

关于selenium - 我如何选择这个跨度元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14768491/

相关文章:

java - Log4j在maven项目中登录

selenium - 从任意位置启动 Watir/Selenium Chrome 驱动程序二进制文件

ruby - 如何编写使用 chrome 的 ruby​​ 网络爬虫?

java - 从 java 转换为 TestNG

python - Selenium.common.exceptions.WebDriverException : Message: unknown error: no chrome binary

java - Xpath 无法找到文本

css - 通过文本值在下拉菜单中选择一个值

java - 如何通过 Selenium 单击模式框中的 HTML 元素?

java - 如何使用appium在移动应用程序中实现卡支付自动化?

c# - Selenium webdriver 选择新窗口 c#