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

时间:2011-07-17 16:01:13

标签: ruby capybara

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

6 个答案:

答案 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)

This commit添加了悬停方法。它的优点是可以在元素上包含css悬停效果。

用法:

find('#posts .post .comments .comment').hover

答案 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_linkclick_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').hoverpage.execute_script "$('#element_2').trigger('mouseover');"之外,还必须将js: true传递给describe块以启用javascript(除非你已经在你的配置)。这让我感到很沮丧。