2017-10-12 135 views
0

我试图找到CSS类和ID的链接,但总是得到一个错误链接:Capybara::ElementNotFound: Unable to find css ...找不到使用水豚和RSpec而写一个集成测试

的代码中实际的段子:

find('#bucket_resources_containers > #user_base_widget.widget > 
div.widget_header > div.right.may- 
edit.control.button.add.icon.add_options > a.tasksy.options').click 

页面的来源是:enter image description here

+0

由于您尝试点击的元素没有内容,它实际上是否具有页面上的任何尺寸?如果不是,它将被视为不可见。另外,使用特定的选择器会让你的测试变得非常脆弱,至少应该有一个id选择器是不需要的,因为另一个仍然应该唯一地标识一个元素,并且你指定的大多数clas可能是不必要的。 –

+0

@ThomasWalpole,据我所知,它应该是'find('#bucket_resources_containers> #user_base_widget> div> div> a')。click',但只找到第一个div元素'#bucket_resources_containers'。 –

+0

@ThomasWalpole该元素不可见。一切工作正常知道。 –

回答

0

你给我们在你的评论中的答案,元素是不可见的。

简短的回答find_link(selector, visible: :all).click

由于水豚显示了documentation

By default Capybara will only locate visible elements. This is because a real user would not be able to interact with non-visible elements.

只有找到可见元素是水豚的智能设计,它可以避免以为用户将能够找到元素。

find_linkmethod documentation发现隐藏的链接时,没有太大的帮助,因为它只能说明这些选项:wait, href, id, title, alt, class

#find_link([locator], options = {}) ⇒ Capybara::Node::Element 

但是你看的finding documentation有一个visible选项:

find_link('Hello', :visible => :all).visible? 
find_link(class: ['some_class', 'some_other_class'], :visible => :all).visible? 

该选项visible来自#all方法,where you can see here。它可以有以下值:

true - only finds visible elements. 
false - finds invisible and visible elements. 
:all - same as false; finds visible and invisible elements. 
:hidden - only finds invisible elements. 
:visible - same as true; only finds visible elements. 

所以,你的情况,你可以使用visible: false,如果你真的意味着它被隐藏,或者visible: :all如果你不关心的知名度。