如何模仿与水豚鼠标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
我想知道如何使页面上的.actions
button可见,以便之后点击它。
任何帮助将非常感激。
水豚提供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