Capybara 1.0.0を使用していますが、マウスをそのブロックに合わせると表示されるリンクがページにあります。そのため、テストでマウスオーバーをトリガーして、その非表示のリンクをクリックできるようにします。グーグルで検索しましたが、自分に合った解決策が見つかりませんでした。皆さん、これを手伝ってくれませんか?
Capybara Webkitを使用することを選択しましたが、残念ながら、jQueryを使用してjavascriptを実行する必要がありました。
page.execute_script('$(".ClassSelector").trigger("hover")')
このブログには答えがあります:
http://aokolish.me/blog/2012/01/22/testing-hover-events-with-capybara
page.find('#element').trigger(:mouseover)
ただし、これはSeleniumドライバーでは機能しません。
http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Element#trigger-instance_method
これを機能させるのにも苦労しました。ウェブ上には相反する情報がたくさんあります。これが私がそれをした方法です:
設定:Rails 3.2.1、capybara 1.1.2、rspec 2.8.0、Selenium-webdriver 2.20.0
page.execute_script "$('tr.user-#{user.id}').trigger('mouseover')"
これにより、以前に非表示にされていたリンクが(jQueryのホバー関数によって)表示され、have_link
およびclick_link
からアクセスできるようになります。
注:これは機能しないため、notpage.evaluate_script
を記述したいとします。
編集:まあ、@ kelly-suttonのソリューションは私のものと同じだと気づきました。だから私はこれを確認することができます。
find('#element').hover
またはpage.execute_script "$('#element_2').trigger('mouseover');"
のいずれかを使用するだけでなく、javascriptをオンにするには、js: true
をdescribe
ブロックに渡す必要があります(実行していない場合)。構成内のそれ)。これは私を少しつまずかせた。
視認性の問題については、ポルターガイストのウィンドウサイズを変更すると役立つ場合があります。私はspec_helper.rbでそれをしました
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, window_size: [1280, 600])
end