2016-08-10 13 views
1

アクションを実行してボタンをクリックしてから、ページをリロードしない限りボタンが表示されません。そして、ボタンを表示するのに時間がかかることがあり、ページを複数回リロードする必要があります。私は静的な遅延を入れたくありません。だから、カピバラやルビーを使用して、次の達成するための方法がある:capybaraとrubyを使用してボタンが表示されるまでページをリロードする方法

do 
    page.evaluate_script("window.location.reload()") 
    until a button appears 

答えて

3

メストのコードが正常に動作する必要がありますが、私は再書き込み、それとしてだろう:

Timeout.timeout(Capybara.default_max_wait_time) do 
    loop do 
    page.evaluate_script("window.location.reload()") 
    break if page.has_selector?(...) 
    end 
end 

これは、Capybara設定で定義されたタイムアウト以上の時間を待たなければならない場合、必ず失敗します。たとえば、仕様がCIサーバー上で実行されている場合に役立ちます。

一部のドライバでは、一部のスクリプトの評価中に中断する可能性があるため、予期せぬ動作が引き続き発生する可能性があることに注意してください。

+1

@waqas 'page.has_selector(...)'は 'page.has_selector?(...)'でなければなりません。それ以外の場合は動作しません。 –

+0

@MesutGüneşありがとう。コードスニペット内で修正され、修正されました。 – smefju

+0

'page.has_selector?'は、要素が表示されない場合に最初の試行が終了する前にTimeoutがトリガーするため、実際には再試行されないように、要素が表示されるようにCapybara.default_max_wait_timeまで待機します。 –

0

reoloadがpage.has_selector?戻るまで本当、この点を確認してください。

while true 
    page.evaluate_script 'window.location.reload()' 
    if page.has_selector?("css_selector") 
    break 
    end 
end 
関連する問題