无法在Capybara测试中触发鼠标事件

我正在使用Capybara 1.0.0,我的页面中有一个链接,当鼠标hover在该块上时可以看到该链接。 所以我想在测试中触发鼠标,以便我可以单击该隐藏的链接。 我用Google搜索,但找不到适合我的解决方案。 你能帮助我吗?

我选择使用Capybara webkit,遗憾的是我不得不求助于使用jQuery执行javascript:

page.execute_script('$(".ClassSelector").trigger("hover")') 

此提交添加了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_linkclick_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').hoverpage.execute_script "$('#element_2').trigger('mouseover');" 一个人还必须将js: true传递给describe块以启用javascript(除非你在配置中已经完成了)。 这让我有点沮丧。