在我的cucwup测试中,水豚无法通过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'
我错过了什么?
4条答案
按热度按时间bq3bfh9z1#
默认情况下,水豚不会查找页面上不可见的元素。您可以尝试
如果是这样,并且您正在测试一个应用,那么您应该执行用户会执行的任何操作,以使该元素可见,然后检查其是否存在。
vshtjzan2#
虽然我是水豚的新手,但我想这可能对你有用!!
另外,将此代码添加到
env.rb
文件中。66bbxpm53#
在大多数情况下,可接受的答案是好的,然而,有时元素可能动态地呈现;而不仅仅是隐藏的。当使用
find
并且元素不存在时,我们会得到一个错误,这个错误非常类似于它存在时的错误,但是隐藏的。我们如何处理这种情况?Capybara::Node::Finders#all也称为:
find_all
具有与find
相同的可见性选项,但在没有匹配项时不会抛出错误。这与ActiveRecord中的
where
与find
非常相似,两种方法都有用途。如果您希望返回匹配的元素或
nil
,而不是Array /集合,则可以追加first
,并获得更接近find
行为的结果,而不会出现错误。5f0d552i4#
我认为,是时候更新水豚的最开始。
而且,我现在无法测试它,但可以尝试
page.html.find('#notice_sent')