我正在使用Capybara 1.0.0,我的页面中有一个链接,当鼠标悬停在该块上时会显示该链接。所以我想在测试中触发鼠标,以便我可以单击该隐藏的链接。 我用Google搜索,但找不到适合我的解决方案。你能帮帮我吗?
答案 0 :(得分:13)
我选择使用Capybara webkit,遗憾的是我不得不求助于使用jQuery执行javascript:
page.execute_script('$(".ClassSelector").trigger("hover")')
答案 1 :(得分:12)
此博客的答案是:
http://aokolish.me/blog/2012/01/22/testing-hover-events-with-capybara
page.find('#element').trigger(:mouseover)
但这对selenium驱动程序不起作用:
http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Element#trigger-instance_method
答案 2 :(得分:6)
答案 3 :(得分:1)
我也很难让这个工作起来。网上有很多相互矛盾的信息。我是这样做的:
设置:rails 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
,因为这不起作用。
编辑:我刚刚意识到@kelly-sutton的解决方案与我的相同。所以我可以证实这一点。
答案 4 :(得分:0)
对于可见性问题,有时候有助于改变恶作剧者的窗口大小。我做到了 在spec_helper.rb
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, window_size: [1280, 600])
end
答案 5 :(得分:0)
除了使用find('#element').hover
或page.execute_script "$('#element_2').trigger('mouseover');"
之外,还必须将js: true
传递给describe
块以启用javascript(除非你已经在你的配置)。这让我感到很沮丧。