【发布时间】:2011-07-17 16:01:12
【问题描述】:
我正在使用 Capybara 1.0.0,并且我的页面中有一个链接,当鼠标悬停在该块上时该链接可见。所以我想在测试中触发鼠标悬停,这样我就可以点击那个隐藏的链接。 我用谷歌搜索了它,但找不到适合我的解决方案。你们能帮我解决这个问题吗?
【问题讨论】:
我正在使用 Capybara 1.0.0,并且我的页面中有一个链接,当鼠标悬停在该块上时该链接可见。所以我想在测试中触发鼠标悬停,这样我就可以点击那个隐藏的链接。 我用谷歌搜索了它,但找不到适合我的解决方案。你们能帮我解决这个问题吗?
【问题讨论】:
我选择使用 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
【讨论】:
【讨论】:
我也遇到了很多麻烦。网络上有很多相互矛盾的信息。我是这样做的:
设置: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 的解决方案与我的相同。所以我可以确认一下。
【讨论】:
对于可见性问题,有时更改 poltergeist 的窗口大小会有所帮助。我已经做到了 在 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(除非您在配置中这样做了)。这让我有点不知所措。
【讨论】: