如何模仿与水豚鼠标hover

基本上,我试图做的是点击一个button,变得可见时,hover另一个元素(其父)。

我试图在隐藏button的父级上使用trigger.('mouseover') ,但这似乎不起作用。

这是来自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") 

而错误…

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

我想知道如何使页面上的.actionsbutton可见,以便之后点击它。

任何帮助将非常感激。

水豚提供2.1版的Element#hover方法 :

 find('.some_class').hover 

这个方法在Capybara::Selenium::Driver中实现,几乎和@ AlexD的答案一样。

请注意,要在Selenium中使用#hover , 通常最好在以下位置开启本机事件 :

 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 

亚历克斯在他的博客中描述了这些问题的解决scheme:查看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) 

我find了一种使用Capybara + Selenium驱动程序模拟“鼠标hover”的方法:

 module Capybara module Node class Element def hover @session.driver.browser.action.move_to(self.native).perform end end end end 

使用水豚+selenium可以使用这个命令“hover”:

 page.driver.browser.action.move_to(page.find('YourElement').native).perform