无法在Capybara测试中触发鼠标事件
我正在使用Capybara 1.0.0,我的页面中有一个链接,当鼠标hover在该块上时可以看到该链接。 所以我想在测试中触发鼠标,以便我可以单击该隐藏的链接。 我用Google搜索,但找不到适合我的解决方案。 你能帮助我吗?
我选择使用Capybara webkit,遗憾的是我不得不求助于使用jQuery执行javascript:
page.execute_script('$(".ClassSelector").trigger("hover")')
这个博客有答案:
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
此提交添加了hover方法。 它具有在元素上包含csshover效果的优点。
用法:
find('#posts .post .comments .comment').hover
我也很难让这个工作起来。 网上有很多相互矛盾的信息。 我是这样做的:
设置: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的hoverfunction),然后可以访问have_link
和click_link
。
注意:您不想编写page.evaluate_script
因为这不起作用。
编辑:嗯,我刚才意识到@ kelly-sutton的解决方案与我的相同。 所以我可以证实这一点。
对于可见性问题,有时候有助于改变恶作剧者的窗口大小。 我在spec_helper.rb中完成了它
Capybara.register_driver :poltergeist do |app| Capybara::Poltergeist::Driver.new(app, window_size: [1280, 600]) end
除了使用find('#element').hover
或page.execute_script "$('#element_2').trigger('mouseover');"
一个人还必须将js: true
传递给describe
块以启用javascript(除非你在配置中已经完成了)。 这让我有点沮丧。