2011-08-14 182 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文檔中... –