2011-11-26 67 views
4

我使用以下規格與MiniTest::SpecCapybara水豚field.has_css?匹配器

find_field('Email').must_have_css('[autofocus]') 

檢查,如果所謂的「電子郵件」現場有autofocus屬性。該doc說以下內容:?

has_css(路徑,選擇= {})

檢查,如果給定的CSS選擇器的頁面或當前節點上。

據我所知,字段'電子郵件'是一個節點,因此調用must_have_css應該肯定工作!我做錯了什麼?

回答

7

通過Jonas Nicklas得到了一個答案:

不,它不應該工作。 has_css?將檢查元素的任何後代 與給定的CSS是否匹配。它不會檢查元件 本身。由於自動對焦屬性可能位於電子郵件字段 本身,has_css?在這種情況下總會返回錯誤。

您可以試試:

find_field('Email')[:autofocus].should be_present 

這也可以使用XPath完成,但我不記得語法關 我的頭頂。


我的解決辦法:

find_field('Email')[:autofocus].must_equal('autofocus') 
+0

雖然我理解@jnicklas的論點,認爲'''has_css?'''應該只適用於後代,那麼擁有'''''''''匹配器(類似於[jQuery.is()] http://api.jquery.com/is/))適用於當前元素。 – gmcnaughton

+1

請參閱https://gist.github.com/3976287瞭解添加'''match_selector?''和'''match_css?'''matcher的猴子補丁。原始代碼可以寫成'''find_field('Email')。must_match_css('[autofocus]')'''(未經測試...) – gmcnaughton

+0

不錯!謝謝:) –

0

關閉我的頭頂。你可以使用has_selector?()。使用Rspec的機智CAPY:

page.should have_selector('email', autofocus: true) 

還要檢查水豚匹配器http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Matchers

+0

看起來前途無量,但遺憾的是沒有在所有的工作。 ( –

+0

)您是否爲此電子郵件字段聲明瞭具有'autofocus'設置的CSS類?如果是這樣,您可以使用此類來檢查「email」字段,例如:'page.should have_selector('email.autofocused ')。'autofocused'是你的CSS類。 ' –

+0

自動對焦是**不是** CSS,它是HTML標準。 –

0

我沒有用之前MINITEST但是你用於檢查屬性語法看起來是正確的。

我擔心你使用find_field。該文檔說:

在頁面上找到一個表單域。該字段可以通過其名稱,標識或標籤文本找到。

它看起來像你試圖找到基於標籤的字段。如果是的話,我會檢查你是否有for屬性,並且它有你正在尋找的表單字段的正確ID。爲了排除這個問題,你可以暫時把你的表單字段標記爲id並明確地查找。