2016-03-22 78 views
2

水豚在我的黄瓜测试中无法通过它的ID找到<p>标记。当我save_and_open_page时,我可以看到元素。但我不能用has_css?find找到它:水豚不能通过ID找到元素

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'

我缺少什么?

回答

8

默认情况下,水豚没有找到不在页面上显示的元素。你可以试试

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

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

+0

是的 - 该ID在页面上,但wasn直到我在选项卡上添加点击 –

-1

我认为,现在是时候更新水豚的一开始。

而且,我现在还不能对其进行测试,但尝试page.html.find('#notice_sent')

+0

page.html中返回一个字符串,所以'find'不是一个有效的方法 –

+0

为了使用上的绳子发现者,你需要创建一个水豚::节点::从简单的像'Capybara.string(页.html).find(...)' - 虽然这是可能的,但确实更好的解释为什么Capybara没有在会话中找到元素 - 请参阅我的回答 –

-1

虽然我是水豚的新手,但我认为这可能适合你!

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

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

Capybara.ignore_hidden_elements = false 
+0

将ignore_hidden_​​elements设置为false在99%的时间内是一个非常糟糕的主意,尤其是如果您将Capybara用作测试工具。这将导致不正确地通过测试的很多用户界面问题。 –