基本的に、私がやろうとしているのは、別の要素(その親)をホバーするときに表示されるボタンをクリックすることです。
非表示ボタンの親で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
ボタンをページに表示する方法を知りたいのですが。
どんな助けでも大歓迎です。
カピバラは、バージョン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
アレックスは彼のブログでそのような問題の解決策を説明しました:それを確認してください 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)
Capybara + Seleniumドライバーを使用して「マウスホバー」をシミュレートする方法を見つけました。
module Capybara
module Node
class Element
def hover
@session.driver.browser.action.move_to(self.native).perform
end
end
end
end
Capybara + Seleniumを使用すると、このコマンドで「ホバー」を使用できます。
page.driver.browser.action.move_to(page.find('YourElement').native).perform