Как эмулировать наведение мыши с помощью капибары - PullRequest
46 голосов
/ 20 марта 2012

По сути, я пытаюсь нажать на кнопку, которая становится видимой при наведении на другой элемент (его родительский элемент).

Я пытался использовать 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 видимой на странице, чтобы потом нажать ее.

Любая помощь будет высоко ценится.

Ответы [ 4 ]

99 голосов
/ 16 мая 2013

Капибара обеспечивает Element#hover метод с версии 2.1:

find('.some_class').hover

Этот метод реализован в Capybara::Selenium::Driver почти так же, как в ответе @ AlexD.

Обратите внимание, что для использования #hover в Selenium обычно лучше включить нативные события на :

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
18 голосов
/ 20 марта 2012

Алекс описал решение таких проблем в своем блоге: зацените 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)
7 голосов
/ 24 декабря 2012

Я нашел способ симулировать «зависание мыши» с помощью Capybara + драйвер Selenium:

module Capybara
  module Node
    class Element
      def hover
        @session.driver.browser.action.move_to(self.native).perform
      end
    end
  end
end
4 голосов
/ 31 января 2014

Используя Capybara + Selenium, можно использовать «зависание» с этой командой:

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