web-dev-qa-db-ja.com

カピバラでマウスホバーをエミュレートする方法

基本的に、私がやろうとしているのは、別の要素(その親)をホバーするときに表示されるボタンをクリックすることです。

非表示ボタンの親でtrigger.('mouseover')を使用しようとしましたが、うまくいかないようです。

仕様からのコードスニペットは次のとおりです。

 # 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ボタンをページに表示する方法を知りたいのですが。

どんな助けでも大歓迎です。

47
adritha84

カピバラは、バージョン2.1から Element#hoverメソッド を提供しています:

find('.some_class').hover

このメソッドは、@ AlexDの回答とほぼ同じ方法でCapybara::Selenium::Driverに実装されています。

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
101
Andrei Botalov

アレックスは彼のブログでそのような問題の解決策を説明しました:それを確認してください 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)
18
Said Kaldybaev

Capybara + Seleniumドライバーを使用して「マウスホバー」をシミュレートする方法を見つけました。

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

Capybara + Seleniumを使用すると、このコマンドで「ホバー」を使用できます。

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