2016-03-22 28 views
2

水豚在我的黃瓜測試中無法通過它的ID找到<p>標記。當我save_and_open_page時,我可以看到元素。但我不能用has_css?find找到它:水豚不能通過ID找到元素

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'

我缺少什麼?

回答

8

默認情況下,水豚沒有找到不在頁面上顯示的元素。你可以試試

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

看看是否屬於這種情況。如果是這樣,並且您正在測試應用程序,那麼您應該執行用戶執行的任何操作,以使該元素可見,然後檢查其存在。

+0

是的 - 該ID在頁面上,但wasn直到我在選項卡上添加點擊 –

-1

我認爲,現在是時候更新水豚的一開始。

而且,我現在還不能對其進行測試,但嘗試page.html.find('#notice_sent')

+0

page.html中返回一個字符串,所以'find'不是一個有效的方法 –

+0

爲了使用上的繩子發現者,你需要創建一個水豚::節點::從簡單的像'Capybara.string(頁.html).find(...)' - 雖然這是可能的,但確實更好的解釋爲什麼Capybara沒有在會話中找到元素 - 請參閱我的回答 –

-1

雖然我是水豚的新手,但我認爲這可能適合你!

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

此外,該代碼添加到您的env.rb文件。

Capybara.ignore_hidden_elements = false 
+0

將ignore_hidden_​​elements設置爲false在99%的時間內是一個非常糟糕的主意,尤其是如果您將Capybara用作測試工具。這將導致不正確地通過測試的很多用戶界面問題。 –