2013-01-16 16 views
7

私のテストでは、フィールドに記入してEnterを押すステップがあります。このフィールドは、次のページに設定された結果を返します。ここで カピバラで睡眠を使うのに良い選択肢はありますか?

は私のヘルパーメソッドです:その後

def search(term) 
    fill_in('query-text', :with => term) 
    click_button('search-button') 
end 

I持っているだけで言うステップ:

page.should have_content(tutor) 

しかし、問題があることにもかかわらず、と私のページのロード後ページ結果、それが偽であってもそれが通過した後のステップ。私はステップでデバッガを設定しています。手動でチェックすると、アサーションも失敗します。私の前提は、次のステップはページがリロードされる前にチェックすることです。私はそれが見えるように私の検索方法の終わりに睡眠を置い:

def search(term) 
    fill_in('query-text', :with => term) 
    click_button('search-button') 
    sleep 5 
end 

しかし、私は睡眠を使用してこの問題を解決するためのハックの方法であるように感じます。私はCapybara 2を使用しているので、wait_untilの使用は削除されています。睡眠に頼るのではなく、この問題に対処するより良い方法はありますか?

答えて

-1

はい、あなたは右wait_untilが削除されている、新しい方法が#synchronizeですが、私はそれを使用する方法を今のところわかりません:)

http://www.elabs.se/blog/53-why-wait_until-was-removed-from-capybara

https://github.com/jnicklas/capybara/blob/master/lib/capybara/node/base.rb#L44に見えます

+0

最初のリンクは、 'synchronize'が' wait_until'とは非常に異なる用途を持っていることを明確に示しています。 – asymmetric

1

このテストは、既にページに存在するtutorとして渡されます。

だから、tutorはチェックしないでください。テキストがtutorの要素の場合は、ページのリロード後にのみ存在します。

1

HTMLページのtutorテキストが非表示になっていますか? has_content?は、表示されていない非表示のテキストを含め、htmlにあるテキストの場合はtrueを返します。だから私はexpect(page).to have_text(tutor)と置き換え、ページ上に表示されているテキストのみをチェックします。 .textもかなり遅い方法なので、これらの余分な分割秒はあなたにとって便利かもしれません。

別のアプローチは、それはほとんどの場合、本当に便利なので、あなたのスペックヘルパーにwait_until方法を復元することです:いずれの場合で

def wait_until(timeout = DEFAULT_WAIT_TIME) 
    Timeout.timeout(timeout) do 
    sleep(0.1) until value = yield 
    value 
    end 
end 

はそれが固定タイムアウトするたびに待っているよりも良くなります。

関連する問題