Я использую Capybara 1.0.0, и у меня есть ссылка на моей странице, которая становится видимой, когда мышь наводится над этим блоком. Поэтому я хочу запустить мышь в тесте, чтобы я мог нажать эту скрытую ссылку. Я искал ее, но не смог найти решение, которое мне подходит. Можете ли вы, ребята, помочь мне с этим?
Невозможно вызвать событие мыши в тесте Capybara
Ответ 1
Я решил использовать веб-сайт Capybara, и, к сожалению, мне пришлось прибегнуть к выполнению javascript с помощью jQuery:
page.execute_script('$(".ClassSelector").trigger("hover")')
Ответ 2
В этом блоге есть ответ:
http://aokolish.me/blog/2012/01/22/testing-hover-events-with-capybara
page.find('#element').trigger(:mouseover)
Это не работает с драйвером селена, хотя:
http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Element#trigger-instance_method
Ответ 3
Этот коммит добавил метод наведения. Преимущество состоит в том, что эффекты css hover влияют на элементы.
Использование:
find('#posts .post .comments .comment').hover
Ответ 4
У меня было много проблем с тем, чтобы это работало. В Интернете много противоречивой информации. Вот как я это сделал:
Настройка: рельсы 3.2.1, capybara 1.1.2, rspec 2.8.0, selenium-webdriver 2.20.0
page.execute_script "$('tr.user-#{user.id}').trigger('mouseover')"
Это приведет к появлению ранее скрытых ссылок (в силу функции наведения jQuery), которые затем доступны для have_link
и click_link
.
Примечание: вы не хотите написать page.evaluate_script
, так как это не сработает.
Edit: Хорошо, я просто понял, что решение @kelly-sutton такое же, как мое. Поэтому я могу подтвердить это.
Ответ 5
Для проблем с видимостью иногда это помогает изменить размер окна для полтергейста. я сделал это в spec_helper.rb
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, window_size: [1280, 600])
end
Ответ 6
Также, используя find('#element').hover
или page.execute_script "$('#element_2').trigger('mouseover');"
, необходимо также передать js: true
в блок describe
, чтобы включить javascript (если вы не сделали этого в своей конфигурации). Это немного сработало.