【问题标题】:Selector fails to find ins on page选择器在页面上找不到 ins
【发布时间】:2015-08-11 09:56:50
【问题描述】:

我在一个 html 页面上有一个时髦的元素,我无法使用 XPath 查询进行选择。我正在使用 Capybara,但我希望这是一个 XPath 问题。可能- 字符需要转义或错误查询?

HTML 元素

<ins class="iCheck-helper" style="position: absolute; top: 0%; left: 0%; display: block; width: 100%; height: 100%; margin: 0px; padding: 0px; border: 0px; opacity: 0; background: rgb(255, 255, 255);"></ins>

XPath

"//*[contains(@class, 'iCheck-helper')]"

红宝石/水豚

elements = all(:xpath, myXPathQuery) (documentation)

elements.CountCapybara::Resultelements.count 返回 0,我希望返回 1。

【问题讨论】:

    标签: ruby xpath capybara


    【解决方案1】:

    作为 XPath,您需要这样做有什么特别的原因吗? Capybara 支持 CSS 选择器,这样更容易为类名编写。

    elements=all(:css, '.iCheck-helper')
    

    当使用 all 时,它默认立即返回,因为它假定没有元素是有效结果。如果您的页面是动态变化的,并且您知道您至少需要一个元素,那么您应该这样做

    elements=all(:css, '.iCheck-helper', minimum: 1)
    

    它将等待 Capybara.default_wait_time 秒以至少出现一个匹配元素。你也可以通过 count: 1 (而不是 minimum )如果你确定你只需要一个元素并且超过这个应该是一个错误,尽管在这种情况下 #find 可能更有意义

    我刚刚注意到您的 CSS 向右滚动,具有不透明度:0 - 在任何真正的浏览器驱动程序(selenium、capybara-webkit、poltergeist 等 - 基本上除了 racktest 之外的任何东西)中都会生成元素不可见,因此默认情况下不会被发现。要找到该元素,您可以这样做

    elements=all(:css, '.iCheck-helper', minimum: 1, visible: :all)
    

    请注意,由于 Capybara 旨在模拟真实用户,因此寻找不可见元素通常不是一件好事,因为真实用户无法看到它或与之交互。执行任何可以使该元素可见的操作通常是一个更好的主意,然后检查它的存在/与它交互。

    【讨论】:

    • 这个特定代码库的架构使得切换到 css 很尴尬。
    • 我最终选择了与您的建议类似的其他内容。
    • 我可能误解了您对代码库架构的评论,但无需将所有测试交换为 css,您可以指定在逐个调用的基础上覆盖默认类型的选择器第一个参数为 :css 或 :xpath (或任何其他 capybara 提供的(或自定义)选择器类型)。如果你跳过第一个参数,它默认为 Capybara.default_selector
    【解决方案2】:

    试试:

    myXPathQuery = '//ins[@class="iCheck-helper"]'
    elements = all(:xpath, myXPathQuery) 
    

    【讨论】:

    • 由于某种奇怪的原因,我收到一条错误消息,指出此格式查找的 xpath 无效。
    猜你喜欢
    • 2019-04-02
    • 2013-06-16
    • 2019-04-08
    • 1970-01-01
    • 2012-12-08
    • 2015-09-08
    • 2021-06-11
    • 2017-11-19
    • 1970-01-01
    相关资源
    最近更新 更多