2016-05-02 13 views
-1

3つの選択ドロップダウンを使用してサーバーから(ajax経由で)データを取得しています。私は、Ajaxリクエストが終了してから次のドロップダウンから値を選択するのを待つ必要のある統合テストを作成したいと思います。CapybaraのためにAjaxコールが終了するのを待ちます。

これまでのところ、私は次の選択を行う前に数秒待っていますが、それは信頼できるものではなく、良い解決策ではありません。

+0

https://robots.thoughtbot.com/write-reliable-asynchronous-integration-tests-with-capybara –

答えて

0

を選択行うことができますcapybara(最新バージョン)がデフォルトでajaxが完了してコード内の次の行を実行するのを待ちます。私は何かをする必要はなく、他のものを選ぶだけでした。

select 'VW', from: 'trademarks-dropdown' 
select 'Golf', from: 'models-dropdown' 
assert_equal 200, status_code 
+0

注:Ajaxが完了するのカピバラは実際に待機していません - それはへのオプション要素を待ち現れる。それは小さなテクニカルだが、Capybaraはブラウザーの要求を知らず、ページ上に表示されていることと見えないことが分かっているので、理解することが重要です。 –

0

カピバラは、ページに表示する項目が自動的に表示されるのを待っています。十分長く待たなければ、Capybara.default_max_wait_timeを増やすか、waitオプションをほとんどのfinder/actionsに渡すことができます。あなたはアヤックスで選択ボックスをロードする場合

だからあなただけの

select('Item that is being loaded') 

を行うことができますし、カピバラは選択し利用できるようにそのテキストとオプションのCapybara.default_max_wait_time秒まで待機します。それはアプリの応答時間を十分に長く待っていない場合は、そのページ上に表示され、オプションのために10秒まで待ちます

select('Item that is being loaded', wait: 10) 

は私が持っているそれを

関連する問題