1. ホーム
  2. ruby

[解決済み] JS実行後にCapybaraに可視性チェックをさせるには?

2023-06-16 06:04:39

質問

ページをロードした後、xhrによって返されたデータに基づいて様々なアイテムを実行し、隠したり表示したりするコードを持っています。

私の統合テストはこのような感じです。

it "should not show the blah" do
    page.find('#blah').visible?.should be_true
end 

このテストが実行されるコンテキストで手動でページにアクセスすると、#blahは ではなく が表示されます。私は、Capybaraがページの初期状態(この場合は不可視)を見て、DOMの状態を評価し、JSが実行される前にテストに失敗しているのではないかと思っています。

はい、私は :js => true を含む記述ブロックに設定しました :)

どんなアイデアでも大いに結構です! 私はここに意図的な遅延を置く必要がないことを望みます、それは薄っぺらく感じられ、物事を遅くするでしょう。

どのように解決するのですか?

私は find 文は暗黙の wait を持つもので、Capybara は要素がページ上に来るまで待ちますが、見えるようになるまで待つことはありません。

ここで、Capybaraに表示されている要素が表示されるのを待つようにさせたい場合ですが、これは visible オプションを指定することで実現できるはずです。

expect(page).to have_selector('#blah', visible: true)

試していないのですが ignore_hidden_elements の設定オプションは、ここでも役に立つかもしれません。 find が常に可視の要素を待つようにしたい場合にも有用でしょう。