首页  >  文章  >  后端开发  >  如何使用 \'span:contains(\'string\')\' 解决 InvalidSelectorException

如何使用 \'span:contains(\'string\')\' 解决 InvalidSelectorException

DDD
DDD原创
2024-10-18 22:02:03759浏览

How to Resolve InvalidSelectorException with

InvalidSelectorException with "span:contains('string')"

尝试使用 CSS 选择器 "span:contains('Control panel') 定位元素时”,遇到 InvalidSelectorException,显示错误:“给定的 css 选择器表达式“span:contains('Control panel')”无效”。

如问题 #987 和 #1547 中所述,:contains伪类未包含在 CSS 规范中,并且在 Firefox 和 Chrome 中均不支持。这个伪类是 Selenium 1.0 使用的 Sizzle 选择器引擎所独有的。但是,WebDriver 选择不合并 Sizzle 的 CSS 选择器,从而导致了这种不一致。

要有效解决此问题,请使用 的替代属性。 tag:

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')]")
  • 使用normalize-space():

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

jQuery 用法

此外,您可以使用以下语法使用 jQuery:

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

值得注意的观察

根据 @FlorentB 的见解,控制台不支持 CSS 选择器,但 jQuery 提供支持。控制台中的“$(...)”语法代表“document.querySelector”的简写符号,它在包含在页面中后会被 jQuery 覆盖。

以上是如何使用 \'span:contains(\'string\')\' 解决 InvalidSelectorException的详细内容。更多信息请关注PHP中文网其他相关文章!

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