ここで既存の知識体系に追加するには:
JSテストでは、Capybaraは2つのスレッド(1つはRSpec、もう1つはRails)と2番目のプロセス(ブラウザー)を同期させておく必要があります。これは、ほとんどのマッチャーおよびノード検索メソッドで(構成された最大待機時間まで)待機することによって行われます。
カピバラには、主に待機しないメソッドもありますNode#all
。それらを使用することは、断続的に失敗するように仕様に指示するようなものです。
受け入れられた答えは示唆していpage.first('selector')
ます。をNode#first
使用してNode#all
いるため、これは少なくともJS仕様にとっては望ましくありません。
そうは言っても、カピバラを次のように設定した場合Node#first
は待機します。
# rails_helper.rb
Capybara.wait_on_first_by_default = true
このオプションはCapybara 2.5.0で追加され、デフォルトではfalseになっています。
Andreiが述べたように、代わりに
find('selector', match: :first)
または、セレクターを変更します。どちらも、設定やドライバーに関係なくうまく機能します。
さらに複雑なことに、Capybaraの古いバージョン(または設定オプションが有効)では、#find
あいまいさを無視して、最初に一致するセレクターを返すだけです。これも仕様が明確ではなくなるため、あまり良くありません。おそらくデフォルトの動作ではなくなったのではないでしょうか。詳細については既に説明済みなので、省略します。
その他のリソース: