2011-08-14 8 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、どのcapybaraドライバーを使用していますか、あなたはCSSを使用していることを確認していますか:joverのjavascriptまたは。 ..)? – fringd

0

私はCapybara + the 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テストの' debugger'を呼び出し、Chrome/FFブラウザウィンドウで何が起きているのかを見て、Seleniumコマンドを入力してみてください。 –

+0

ああ、FFではネイティブイベントを有効にする必要があるかもしれません。それはセレンのドキュメントにあります... –

関連する問題