2011-08-14 93 views
8

我在页面上有一个按钮,只有当鼠标悬停在某个元素上时才会出现。但我无法弄清楚如何模拟这个,然后点击链接,我可以使用水豚和硒对黄瓜进行测试。将鼠标悬停在水豚上

回答

5

您可能需要使用自定义的步骤,这样,如:

When /^I click "([^"]*)" inside element "([^"]*)"$/ do |button, element_name| 

里面,你写的东西,如:

begin 
    evaluate_script("$('#{element_name}').trigger('mouseover')") 
    rescue Capybara::NotSupportedByDriverError 
end 

然后单击您想要:)

该按钮
+0

可悲的是这并不适用于CSS工作:悬停基于下拉菜单......我们需要某种方法来明确地左右移动鼠标假货某些事情...... – fringd

+0

它应该工作恕我直言。尝试像这样更明确:evaluate_script(“$('div#name> ul> li> a:contains(#{menu_name})')。trigger('mouseover')”)。此外,afaik硒支持移动光标在x,y尺寸,但这不是有趣的;) – socjopata

+0

socjopata,你正在使用什么水豚司机,你是否确定你使用CSS:悬停,而不是JavaScript或jQuery的.hover(。 ..)? – fringd

0

我发现了一种使用Capybara + Selenium驱动程序模拟“鼠标悬停”的方法。试试这个代码:

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

这不起作用 –

+0

适用于Selenium的Chrome和Firefox驱动程序。在盘旋之前,您可能必须等待几分之一秒。如果它仍然无法正常工作,请使用'debugger' gem,在您的Capybara测试中插入对调试器的调用,然后尝试在Chrome/FF浏览器窗口中观看正在发生的事情时输入Selenium命令。 –

+0

哦,在FF中你可能需要启用本地事件。它在Selenium文档中... –