ruby 水豚无法按ID找到元素

cczfrluj  于 2023-01-12  发布在  Ruby
关注(0)|答案(4)|浏览(133)

在我的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'

我错过了什么?

bq3bfh9z

bq3bfh9z1#

默认情况下,水豚不会查找页面上不可见的元素。您可以尝试

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

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

vshtjzan

vshtjzan2#

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

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

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

Capybara.ignore_hidden_elements = false
66bbxpm5

66bbxpm53#

在大多数情况下,可接受的答案是好的,然而,有时元素可能动态地呈现;而不仅仅是隐藏的。当使用find并且元素不存在时,我们会得到一个错误,这个错误非常类似于它存在时的错误,但是隐藏的。我们如何处理这种情况?
Capybara::Node::Finders#all也称为:find_all具有与find相同的可见性选项,但在没有匹配项时不会抛出错误。

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

这与ActiveRecord中的wherefind非常相似,两种方法都有用途。
如果您希望返回匹配的元素或nil,而不是Array /集合,则可以追加first,并获得更接近find行为的结果,而不会出现错误。

page.all('#notice_sent', visible: :all).first
5f0d552i

5f0d552i4#

我认为,是时候更新水豚的最开始。
而且,我现在无法测试它,但可以尝试page.html.find('#notice_sent')

相关问题