Как подражать мышиному курсу с Capybara
В принципе, то, что я пытаюсь сделать, - это нажать кнопку, которая становится видимой при падении другого элемента (его родителя).
Я попытался использовать 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
видимой на странице, чтобы щелкнуть ее потом.
Любая помощь будет высоко оценена.
Ответы
Ответ 1
Capybara предоставляет метод 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
Ответ 2
Алекс описал решение таких проблем в своем блоге: проверьте 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)
Ответ 3
Я нашел способ имитировать "наведение мыши", используя Capybara + драйвер Selenium:
module Capybara
module Node
class Element
def hover
@session.driver.browser.action.move_to(self.native).perform
end
end
end
end
Ответ 4
Используя Capybara + Selenium, можно использовать "hover" с помощью этой команды:
page.driver.browser.action.move_to(page.find('YourElement').native).perform