Capybaraには待機中および待機中の機能があります。私は可能な限り最初のものを使用しようとしています。CapybaraのCSS要素の待機機能
find
(またはその派生語の1つ)を使用して非同期に表示されるCSS要素を探す方法はありますか?残念ながら、関数page.has_css?
は待機していない関数です。
Capybaraには待機中および待機中の機能があります。私は可能な限り最初のものを使用しようとしています。CapybaraのCSS要素の待機機能
find
(またはその派生語の1つ)を使用して非同期に表示されるCSS要素を探す方法はありますか?残念ながら、関数page.has_css?
は待機していない関数です。
page.has_css?
が待機していない機能であるという申し立ては正しくありません。 page.has_css?
は、ページに要素が表示されるまでには、Capybara.default_max_wait_time
秒まで待機し、要素がその時間内にページにあるかどうかに基づいて、true
またはfalse
を返します。従って、与えられるCapybara.default_max_wait_time = 5
if page.has_css?("div#my_div")
puts "on page"
else
puts "not on page"
end
は5秒まで待つでしょう。 "my_div"のIDを持つdivがページに表示されるとすぐ、 "ページ上に"印刷されます。一致するdivが5秒以内に表示されない場合は、「ページには表示されません」と表示されます。あなたはそれが特定のコールのために長く待つしたい場合は、要素はあなたが
page.assert_selector(:css, 'div#my_div') # :css is the default so can usually be omitted
page.assert_css('div#my_div') # minitest
expect(page).to have_css('div#my_div') # RSpec
のいずれかを行うことができますが存在することを確認したいブール応答を望むのではなく場合は、
:wait
オプション
if page.has_css?("div#my_div", wait: 10) # will wait up to 10 seconds
...
を渡すことによってdefault_max_wait_time
を上書きすることができます要素が
表示されない場合は、実際の要素が必要な場合は、私たちできる要素が以前のように表示されるのを待ちますが、例外を発生させるのではなくfalse
を返します
e find
も待機します。したがって
el = page.find(:css, 'div#my_div') # :css is the default and can usually be omitted
は、要素が表示されるのを待機し、見つかった場合に要素を返します。要素がdefault_max_wait_time
秒以内に見つからない場合、例外が発生します。
注:基本的には、唯一の非待機方法がall
とfirst
あり、さらにはそれらの要素から返されたものの、あなたはカウントオプション(:count
、:minimum
、:maximum
、:between
)のいずれかに合格した場合待機させることができますそれらは依然として再ロード不可能であり、したがってスコープなどに使用される場合、さらなる動作効果を有する可能性がある。click_link
,などのメソッドでさえ、find(...).click
などとして実装されるので待機する。
メソッド 'find'は既に見つかる要素。テストにはロジックが含まれてはならないので、要素または 'page.assert_selector( '#foo'、:count => 0)を待つために' page.assert_selector( '#foo'、:count => 1) ) 'なしを待つ。 @FlorentB。 –
'page.assert_selector( '#foo'、:count => 0)'は、通常、 'page.assert_no_selector( '#foo')'と書かれています。 'page.assert_no_selector( '#foo'、count:3)' –