首页 >web前端 >css教程 >为什么'span:contains('string')”在 Firefox 中的 Selenium 中失败,如何修复?

为什么'span:contains('string')”在 Firefox 中的 Selenium 中失败,如何修复?

DDD
DDD原创
2024-12-29 04:29:10688浏览

Why Does

使用 Firefox 的 Selenium 中的“span:contains('string')”时出现无效的 SelectorException

尝试通过 CSS 定位元素时在带有 Firefox 的 Selenium Python 选择器中,“span:contains('Control panel')”表达式可能会遇到InvalidSelectorException 并显示消息“给定 CSS 选择器表达式 'span:contains('Control panel')' 无效。”

如 GitHub issues #987 和 #1547 中所述,不支持 :contains 伪类在 CSS 规范中,因此 Firefox 无法识别。这个伪类是 Selenium 1.0 中使用的 Sizzle 选择器引擎的一部分,但 WebDriver 不支持 Sizzle 风格的 CSS 选择器。

对于本身不支持 CSS 选择器的浏览器(例如 IE7 和 IE8), :contains 可能仍然有效,导致不同浏览器之间的不一致。更可靠的方法是使用 span 标签的另一个属性,例如:

element = "span[attribute_name=attribute_value]"

替代解决方案:

如果预期元素是一个带有文本“控制面板”,您可以根据流行的 DOM 使用以下 XPath 表达式之一树:

  • 使用 text():

    element = my_driver.find_element_by_xpath("//span[text()='Control panel']")
  • 使用contains():

    element = my_driver.find_element_by_xpath("//span[contains(.,'Control panel')]")
  • 使用标准化空间():

    element = my_driver.find_element_by_xpath("//span[normalize-space()='Control panel']")

使用jQuery:

jQuery 还支持 :contains 伪类,允许您使用以下表达式:

$('span:contains("Control panel")')

附加说明:

请记住,浏览器控制台本身不支持 CSS 选择器,但 jQuery 通过 $('...') 支持它们快捷方式,通常会覆盖默认的 document.querySelector 方法。

以上是为什么'span:contains('string')”在 Firefox 中的 Selenium 中失败,如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn