【问题标题】:Capybara can not find element by idCapybara 无法通过 id 找到元素
【发布时间】:2019-03-11 21:26:24
【问题描述】:

Capybara 在我的黄瓜测试中无法通过它的 id 找到 <p> 标签。当我save_and_open_page 时,我可以看到该元素。但我无法通过has_css?find 找到它:

pry(#<Object>)> page.html.scan(/notice_sent/).count
=> 1
pry(#<Object>)> page.html.scan(/id=\"notice_sent\"/).count
=> 1
pry(#<Object>)> page.find('#notice_sent')
Capybara::ElementNotFound: Unable to find css "#notice_sent"
from /Users/me/.gem/ruby/2.1.7/gems/capybara-2.4.4/lib/capybara/node/finders.rb:41:in 'block in find'

我错过了什么?

【问题讨论】:

    标签: ruby cucumber capybara


    【解决方案1】:

    默认情况下,Capybara 不会找到页面上不可见的元素。你可以试试

    page.find('#notice_sent', visible: :all)
    

    看看是不是这样。如果是这样,并且您正在测试应用程序,那么您应该执行用户将执行的任何操作以使该元素可见,然后检查其是否存在。

    【讨论】:

    • 是的 - id 在页面上,但直到我添加了一个标签上的点击后才可见
    【解决方案2】:

    虽然我是水豚的新手,但我认为这可能对你有用!

    page.find('#notice_sent', :visible => false)
    

    另外,将此代码添加到您的 env.rb 文件中。

    Capybara.ignore_hidden_elements = false
    

    【讨论】:

    • 在 99% 的情况下将 ignore_hidden_​​elements 设置为 false 是一个非常糟糕的主意,尤其是当您使用 Capybara 作为测试工具时。这将导致错误地通过许多 UI 问题的测试。
    【解决方案3】:

    我想,是时候更新一下capybara了。

    而且,我现在不能测试它,但是试试page.html.find('#notice_sent')

    【讨论】:

    • page.html 返回一个字符串,所以find 不是一个有效的方法
    • 要在字符串上使用查找器,您需要从它创建一个 Capybara::Node::Simple,例如 Capybara.string(page.html).find(...) - 虽然这是可能的,但最好弄清楚为什么 Capybara 不是t 在会话中找到元素 - 请参阅我的答案
    猜你喜欢
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 2011-05-28
    • 2020-05-20
    • 2017-07-23
    • 2019-04-24
    相关资源
    最近更新 更多