Introducing Capybara 2.1 — Elabs を読んでのメモです。
capybara 2.1 を 2.0 と同じ挙動にする
capybara 2.1 を 2.0 と同じ挙動にするには下記のように設定する
Capybara.configure do |config|
config.match = :one
config.exact_options = true
config.ignore_hidden_elements = true
config.visible_text_only = true
end
capybara 1.x から 2.1 にアップグレードする
1.x から 2 系に上げると、互換性がない変更があって大変だけど、下記の設定をしておけばあとは簡単(らしい)。
Capybara.configure do |config|
config.match = :prefer_exact
config.ignore_hidden_elements = false
end
Matching exactly or allowing substrings, Behaviour when multiple elements match a query
READMEのこの辺りの話とほぼ同じ。
Exactness of options
下記のように書いたとき、optionタグの値と"1"を正確にマッチさせたい。でも "smart" なマッチにしてたら "10" にマッチしてしまう可能性もある。
select "1", :from => "Number of people"
正確にマッチさせたい場合は exact_options
を true
に設定すると良い。
Visibility
前のバージョンから、hidden な要素を無視するためのオプション、 Capybara.ignore_hidden_elements
が存在していた。false
がデフォルトだったのを true
に変更した。前の挙動に戻したければ
Capybara.ignore_hidden_elements = false
とするとよい。
Visibilily of text
見えないテキスト(display:none)が text
メソッドの戻り値に含まれるかどうかについて
- capybara 1.x
- RackTest では含まれる
- 他のドライバは含まれない
- capybara 2.0
- RackTest 含む全てのドライバで含まれない
- capybara 2.1
ignore_hidden_elements
をfalse
にしたら含まれる
2.1 では、text
メソッドの引数によって挙動を切り替えることもできる
find("#thing").text # Capybara.ignore_hidden_elements によって挙動が変わる
find("#thing").text(:all) # 見えないテキストも含む
find("#thing").text(:visible) # 見えるテキストだけ
2.0.x から、ignore_hidden_elements
が false
でも、見えるテキストだけを返すオプションがある
Capybara.visible_text_only = true
Asserting against the page title
下記のコードは 2.0 からまともに動かない。
page.should have_css("title", :text => "Whatever")
title 要素は見えない要素なので、text には含まれない。title の内容を取得したり、想定している title かどうかを確認するには下記のようにする。
page.title # => "The title"
page.has_title?("The title") # => true
page.should have_title("The title")
Finding disabled elements
fill_in
やclick_button
などの、フォームやボタンを操作する系のメソッドは、2.0 から disabled な要素に対しては操作できなくなった。has_field?
やfind_field
も同じく disabled な要素に対しては効かないけど、find
やhas_selector?
は効く。- 上記で上げたメソッドに
disabled: true
を引数として渡すと、disabled な要素だけに効くよう動作を変更できる。