【问题标题】:How to overcome Selenium CSS parent only CSS selector limitation如何克服 Selenium CSS 仅父级 CSS 选择器限制
【发布时间】:2014-04-25 08:16:34
【问题描述】:

有没有一种已知的解决方案可以在 Selenium 中使用这样的 CSS 选择器?

$('.sss').find('>div.ui-collapsible-content')

在 Chrome 开发者工具上运行良好。

在 Selnenium 中它会抛出异常

OpenQA.Selenium.InvalidElementStateException : invalid element state: Failed to execute    'querySelector' on 'Element': '>div.ui-collapsible-content' is not a valid selector.
(Session info: chrome=33.0.1750.154)
(Driver info: chromedriver=2.8.241075,platform=Windows NT 6.1 SP1 x86)

我可以只使用没有父部分的选择器

.find('div.ui-collapsible-content')

并且只取第一个元素,但这是一个有点老套的解决方案,现在肯定有人遇到过类似的情况,并找到了比这更优雅的解决方案。

jsfiddle HTML 示例 - http://jsfiddle.net/uHYZL/1/

【问题讨论】:

    标签: javascript html css testing selenium


    【解决方案1】:

    我不会将此称为限制。这对我来说似乎是预期的行为,因为我首先看不到 >div.ui-collapsible-content 是有效的 CSS selector

    $('.sss').find('>div.ui-collapsible-content') 起作用的原因是因为您使用的是 jQuery,它使用 Sizzle 作为引擎盖下的 CSS 选择引擎。它支持 W3C 规范不支持的东西,例如 :contains() 等。

    我不确定您要在这里实现什么。像下面这样的东西不适合您吗?

    var content = driver.FindElement(By.CssSelector(".sss > div.ui-collapsible-content"));
    

    【讨论】:

    • 我在树形结构中工作,并且所有具有 .ui-collapsible-content 类的子级都被选中。
    • @LIUFA:(我不经常使用 jQuery,但是)我看不出$('.sss').find('>div.ui-collapsible-content')".sss > div.ui-collapsible-content" 之间的区别。有没有可用的演示?
    • .sss 仅用于示例目的,但是将元素本身包含到选择器中的解决方案可以工作,只需等待 10 分钟即可接受答案。谢谢。
    • 刚刚意识到它没有:) 我一直在选择子元素,建议使用 IWebDriver.FindElement() 反对 IWebElement.FindElements() 包括元素本身会选择页面上的多个元素,而包括父类将只选择孩子。我们要平铺一个。
    • @LIUFA:演示可能会有所帮助。我在 StackOverflow 中使用了 $('#question-mini-list').find('>div.question-summary')$$('#question-mini-list>div.question-summary'),对我来说看起来一样。
    【解决方案2】:

    您是否尝试过使用 Xpath?它看起来非常可怕和复杂,但我相信你可以构建一个只能找到父母的选择器,然后从那里继续。

    我会尝试构建一个,但目前无法访问计算机

    【讨论】:

      猜你喜欢
      • 2011-10-15
      • 2022-12-20
      • 1970-01-01
      • 2014-04-25
      • 2018-10-27
      • 1970-01-01
      • 2016-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多