2013-11-01 8 views
8

sleepまたはwait_untilは、webpageupdatesによると、最近のバージョンのCapybaraでは無効です。カピバラは働くために睡眠が必要ですか?

しかし、sleep(1)の呼び出しをテストに追加すると、高速なマシンでのみ動作する一連のテストがあります。

事がある
def unix_wait 
    case RbConfig::CONFIG['host_os'] 
    when /darwin/ 
    when /linux-gnu/ 
    sleep(1) 
    end 
end 

、私は昔のUbuntu 12.04 quadcoreを持っている:

describe "dosimeters page" do 
    before do 
    click_link("Dosimeter Read History", :match=>:first) 
    end 
... 

は私がようunix_waitを定義した

describe "dosimeters page" do 
    before do 
    unix_wait 
    click_link("Dosimeter Read History", :match=>:first) 
    end 
... 

は次のようになります。それは、のように見えるのテストですラップトップはJenkinsでこれらのテストを実行しており、すべてはunix_waitコールなしでうまくいきます。 Ubuntu 13.10を実行しているhexacoreデスクトップとmacbook proのラップトップでランダムにテストに失敗しましたが、unix_waitコールを追加するとテストに合格します。

テストの失敗自体は、失敗のロード(一部の実行ではCSS要素が失われているが他のものではない)を示しており、サイトを手動でロードしたときに実際にテストされるものが機能します。

ここで適切な行動は何ですか?明らかに、sleepはテスト中に許可されておらず、wait_untilもありません。しかし、睡眠は働いていますが、それは私にとって非常に原油のようです。 #synchronizedを見ているべきですか?私がブログ投稿から集めたものから、click_linkと呼ぶと既に呼び出されており、テストはまだ失敗しています。

ここで受け入れられるプロトコルは何ですか?

私はそれが重要だと思うので、私は追加する必要があります:これらはすべてjavascriptのテストです。私はqt4(qt5ではなく)上に構築されたcapybara-webkitを使用しています。私はデバッグステップとしてpoltergeistやその他のjavascriptドライバに切り替えることを検討しています。

+0

デバッグにwebdriverを使用できますが、同様の問題があります。 –

+0

私はajaxを使うときにcapybara-webkitと同じ問題を抱えています。私はポルターガイストがこれを解決できるかどうか分かりませんが、試してみる価値があります。 – basgys

+0

あなたはあなたが見ている失敗をもっと説明できますか?私は "css elements missing"が本当に必要とするものが何であるか明確ではない。 – Shepmaster

答えて

4

これをまだ実行していない場合は、テストアサーションでページ上のコンテンツをチェックすると、そのコンテンツが利用可能になるまで一定の時間待機します。

内容を確認するとき、それは暗黙的に待機しますのでので、代わりに睡眠を追加するあなたは

expect(page).to have_content 'Success' 

のようなものを追加することができカピバラは、Ajaxや要素などの読み込みに対応します。あなたが長いすなわち第三パーティークエリ/ログイン

Capybara.default_wait_time = 5 
+1

CapybaraはAjaxに対応していなければなりませんが、テスト中に ':js => true'を使用すると失敗するので、それは確かではありません。 'default_wait_time'を変更することは本当に助けにはなりませんが、' save_and_open_page'は問題を解決することがあります(ウィンドウに作業を中断させます)。 – mmr

+0

Astaが正しいですが、コンテンツをチェックしていないため、カピバラの待機メカニズムが起動していないという問題があります。 Astaは 'have_content'というチェックをしていますが、あなたはそのようなことをやっていません。 – kross

+0

これもここで答えられます:http://stackoverflow.com/a/20003280/2363935 – kross

0

wait_untilsleepの良い代替がusing_wait_time、あるがかかる場合があります知っている要素の読み込みを可能にする必要がある場合

デフォルトの待機時間を変更することができますその例を以下に示す。

using_wait_time 5 do 
    page.should have_content '<content>' 
end 

また、ページをリロードして、条件を確認することもできます。これは時々私のために働く。

visit current_url