web-dev-qa-db-ja.com

Capybaraテストでマウスイベントをトリガーできません

Capybara 1.0.0を使用していますが、マウスをそのブロックに合わせると表示されるリンクがページにあります。そのため、テストでマウスオーバーをトリガーして、その非表示のリンクをクリックできるようにします。グーグルで検索しましたが、自分に合った解決策が見つかりませんでした。皆さん、これを手伝ってくれませんか?

20
kxhitiz

Capybara Webkitを使用することを選択しましたが、残念ながら、jQueryを使用してjavascriptを実行する必要がありました。

page.execute_script('$(".ClassSelector").trigger("hover")')
13
Kelly Sutton

このブログには答えがあります:

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

12
Red

このコミット ホバーメソッドを追加しました。要素にcssホバー効果を含めるという利点があります。

使用法:

find('#posts .post .comments .comment').hover
8
Harm de Wit

これを機能させるのにも苦労しました。ウェブ上には相反する情報がたくさんあります。これが私がそれをした方法です:

設定: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のソリューションは私のものと同じだと気づきました。だから私はこれを確認することができます。

1
bovender

find('#element').hoverまたはpage.execute_script "$('#element_2').trigger('mouseover');"のいずれかを使用するだけでなく、javascriptをオンにするには、js: truedescribeブロックに渡す必要があります(実行していない場合)。構成内のそれ)。これは私を少しつまずかせた。

0
Jeremy Eaton

視認性の問題については、ポルターガイストのウィンドウサイズを変更すると役立つ場合があります。私はspec_helper.rbでそれをしました

  Capybara.register_driver :poltergeist do |app|
    Capybara::Poltergeist::Driver.new(app, window_size: [1280, 600])
  end 
0
Artur79