2017-10-12 162 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如果你不關心的知名度。