找不到使用水豚和RSpec而写一个集成测试
问题描述:
我试图找到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
答
你给我们在你的评论中的答案,元素是不可见的。
简短的回答: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_link
method 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
如果你不关心的知名度。
由于您尝试点击的元素没有内容,它实际上是否具有页面上的任何尺寸?如果不是,它将被视为不可见。另外,使用特定的选择器会让你的测试变得非常脆弱,至少应该有一个id选择器是不需要的,因为另一个仍然应该唯一地标识一个元素,并且你指定的大多数clas可能是不必要的。 –
@ThomasWalpole,据我所知,它应该是'find('#bucket_resources_containers> #user_base_widget> div> div> a')。click',但只找到第一个div元素'#bucket_resources_containers'。 –
@ThomasWalpole该元素不可见。一切工作正常知道。 –