Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to emulate mouse hover with Capybara

Basically, what I'm trying to do is click on a button that becomes visible when hovering another element (its parent).

I have tried to use trigger.('mouseover') on the parent of the hidden button, but that doesn't seem to work.

Here's a code snippet from the spec:

 # label[for ... ] -> the parent element  page.execute_script("$('label[for=\"department_#{department.id}\"]').trigger(\"mouseover\")")       # le hidden button  find(".actions").click       # some <li> on a list that drops down when clicking the hidden button      click_on("Edit department") 

And the error ...

 Failure/Error: click_on("Edit department")  Selenium::WebDriver::Error::ElementNotVisibleError:  Element is not currently visible and so may not be interacted with 

I would like to know how can I make the .actions button visible on the page, in order to click it afterwards.

Any help would be much appreciated.

like image 218
adritha84 Avatar asked Mar 20 '12 09:03

adritha84


2 Answers

Capybara provides Element#hover method from version 2.1:

find('.some_class').hover 

This method is implemented in Capybara::Selenium::Driver in almost the same way as in @AlexD's answer.

Note that to use #hover in Selenium it's usually better to turn native events on:

Capybara.register_driver :selenium do |app|   profile = Selenium::WebDriver::Firefox::Profile.new   profile.native_events = true   Capybara::Selenium::Driver.new(app, :browser => :firefox, profile: profile) end 
like image 169
Andrei Botalov Avatar answered Sep 23 '22 14:09

Andrei Botalov


Alex described the solution of such problems in his blog: check it out http://aokolish.me/blog/2012/01/22/testing-hover-events-with-capybara

RSpec.configure do |config|   # ...   Capybara.javascript_driver = :webkit end  page.find('#element').trigger(:mouseover) 
like image 34
Said Kaldybaev Avatar answered Sep 20 '22 14:09

Said Kaldybaev