11

私のテストでは、フィールドに入力してEnterキーを押すステップがあります。このフィールドは、次のページで結果セットを返します。

これが私のヘルパーメソッドです:

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

その後、次のように簡単に言うステップがあります。

page.should have_content(tutor)

ただし、問題は、私のページの後のページに結果が読み込まれても、それが false であっても、その後のステップが通過することです。ステップにデバッガーを設定しましたが、手動で確認すると、期待どおりにアサーションも失敗します。次のステップは、ページがリロードされる前にチェックすることだと思います。検索メソッドの最後にスリープを配置して、次のようにしました。

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

しかし、スリープを使用することは、この問題を解決するためのハックな方法だと思います。私はカピバラ 2 を使用しているため、wait_until の使用は削除されています。睡眠に頼るのではなく、この問題を処理するためのより良い方法はありますか?

4

3 に答える 3

5

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

もう 1 つの方法は、spec ヘルパーで wait_until メソッドを復元することです。これは、ほとんどの場合に非常に便利です。

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

いずれにせよ、毎回一定のタイムアウトを待つよりはましです。

于 2017-01-10T21:32:05.457 に答える
1

tutorこのテストは、ページに既に存在するためパスします。

したがって、ページのリロード後にのみ存在tutorするテキストを含む要素など、何か他のものをチェックする必要はありません。tutor

于 2013-10-30T09:35:46.507 に答える
0

はい、その通りです。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

于 2013-01-30T15:28:37.780 に答える