Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unable to trigger mouse event in Capybara test

Tags:

ruby

capybara

I am using Capybara 1.0.0, and I have a link in my page which gets visible when mouse hover over that block. So I want to trigger mouse over in test so that I can click that hidden link. I googled it, but couldn't find the solution that suits me. Can you guys help me with this?

like image 417
kxhitiz Avatar asked Jul 17 '11 16:07

kxhitiz


4 Answers

I've chosen to use Capybara webkit, and sadly I had to resort to executing javascript using jQuery:

page.execute_script('$(".ClassSelector").trigger("hover")')
like image 156
Kelly Sutton Avatar answered Nov 15 '22 08:11

Kelly Sutton


This blog has the answer:

http://aokolish.me/blog/2012/01/22/testing-hover-events-with-capybara

page.find('#element').trigger(:mouseover)

This doesn't work with the selenium driver though:

http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Element#trigger-instance_method

like image 28
Red Avatar answered Nov 15 '22 08:11

Red


This commit added the hover method. It has the advantage of including css hover effects on elements.

Usage:

find('#posts .post .comments .comment').hover
like image 9
Harm de Wit Avatar answered Nov 15 '22 09:11

Harm de Wit


I had a lot of trouble getting this to work as well. There's a lot of conflicting information on the web. Here's how I did it:

Setting: 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')"

This will cause the previously hidden links to appear (by virtue of jQuery's hover function), which are then accessible for have_link and click_link.

Note: you do not want to write page.evaluate_script as this won't work.


Edit: Well I just realized that @kelly-sutton's solution is the same as mine. So I can confirm this.

like image 1
bovender Avatar answered Nov 15 '22 10:11

bovender