いけむランド

はてダからやってきました

capybara & chrome でテスト時に画面外を click できなかった → Element#hover で解決した

以前に capybara & chrome でテスト時に画面外を click できなかった問題をスクロールで解決したのだが、画面がさらに長くなるような修正を入れたところ、スクロールが完了する前に click をしようとして、エラーになるようになってしまった。

fd0.hatenablog.jp


これは失敗時にスクリーンショットを撮る設定にしていて、それを確認したところ、スクロールが未完了で、画面最下部の更新ボタンが表示されていないことでわかった。

スクロール完了 (というかブラウザ側での操作完了) を待つメソッドがないか探していたら、Capybara::Node::Base#synchronize でそれっぽいことをしてくれそうな記述を見つけた。

また、マウスポインタを移動させる Capybara::Node::Element#hover を見つけて、これが内部で synchronize を呼んでいるような記述を見つけたため、これを使うように前回のコードを修正した。

github.com

前回のコードを以下のように書き換えたところ、テストが無事 pass するようになった。

find(:xpath, "更新ボタンの xpath").hover.click

めでたしめでたし。