2 回答
TA贡献1825条经验 获得超6个赞
css_selectorSelenium不支持使用按文本定位元素(尽管它可以在开发人员工具控制台中使用)。唯一的可能性是xpath
element = "//span[contains(text(), 'Control panel')]"
my_driver.find_element_by_xpath(element)
编辑:@FlorentB的评论:
css selector控制台也不支持A ,但是JQuery支持它。$('...')控制台中的from是该页面的缩写,document.querySelector通常会被JQuery覆盖。
TA贡献1777条经验 获得超10个赞
错误说明了一切:
selenium.common.exceptions.InvalidSelectorException: Message: Given css selector expression "span:contains('Control panel')" is invalid: InvalidSelectorError: 'span:contains('Control panel')' is not a valid selector: "span:contains('Control panel')"
按照Issue#987和Issue#1547:
The :contains pseudo-class isn't in the CSS Spec and is not supported by either Firefox or Chrome (even outside WebDriver).
伪类是特定于Sizzle Selector Engine该Selenium 1.0依赖。但是,它决定WebDriver不打算支持Sizzle风格CSS selectors是Selenium 1.0使用。
现在,一个有趣的事实是:contains pseudo-class适用于本机不支持CSS选择器(IE7,IE8等)的浏览器,这会导致浏览器和选择器之间的不一致。
因此,更好的解决方案是将<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')]")
使用normalize-space():
element = my_driver.find_element_by_xpath("//span[normalize-space()='Control panel']")
使用jQuery
您还可以如下使用jQuery:
$('span:contains("Control panel")')
琐事:
@FlorentB的宝贵评论。
控制台也不支持CSS选择器,但JQuery支持它。$('...')控制台中的from是该页面的缩写形式,document.querySelector通常会被覆盖JQuery。
添加回答
举报