我有Capybara / poltergeist / phantomjs设置来运行一些UI测试。我的第一个实验如下:
it 'can like a photo', :js => true do
visit root_path(as: 1)
page.first("img.lazy").trigger('click')
save_screenshot('/Users/martinhinge/Downloads/file.png')
within("#control-sidebar-tab-photo") do
page.find("#like").click
expect("#control-sidebar-tab-photo #like").to have_css(".btn-success")
end
end
我在
之前截取屏幕截图page.first("img.lazy").trigger('click')
并且服务器上的所有内容都可以正常加载。
page.first("img.lazy").trigger('click')
应该触发一些javascript来打开侧面板(在我的应用程序中正常工作)。但是当我跑的时候没有任何事情发生。
phantomjs应该执行js吗?
- o编辑o -
我已将点击触发器更改为:
first("img.lazy", minimum: 1).click
当我这样做时,我得到:
水豚::鬼驱:: MouseEventFailed: 在坐标[83,227]点击点击失败。 Poltergeist用CSS选择器&#h; html检测到另一个元素 body.fixed.index.photos.sidebar-collapse.sidebar-mini.skin黑 div.wrapper div.content-wrapper section.content div.row div#photogrid div.col-lg-12.col-sm-12 div.box.box-solid div.box-body.infinite-container div.photo-widget div.photo-widget-content div.photo-widget-header'在这个位置。它 可能与您尝试与之交互的元素重叠。如果你 不要关心重叠元素,尝试使用 node.trigger('单击&#39)。
我尝试将其更改为:
first(".photo-widget-header", minimum: 1).click
现在我没有得到上面的错误,但JS没有被触发。 我知道JS没有被触发的原因是' #like'找不到元素。
答案 0 :(得分:1)
是的,它应该运行JS。如果你真的想要测试你的用户界面是否有效,你也应该拨打.click
而不是.trigger('点击')。 trigger('click')
绕过检查元素是否实际上是可点击的,因此可以隐藏许多错误。另外first
像你一样使用它会绕过水豚的等待行为并导致片状测试,所以你可能想要使用first("img.crazy", minimum: 1)
或设置Capybara.wait_on_first_by_default = true。
至于为什么你没有看到你期望的行为,如果你只是根据屏幕截图,它可能只是在面板打开之前发生的截图,因为点击是异步发生的。它也可能是点击实际上没有击中正确的元素(使用.click而不是.trigger,它会告诉你)这可能意味着你需要在你的驱动程序注册中设置更大的window_size(窗口不够宽和元素彼此折叠)或其他调试,以找出未点击您期望点击的元素的原因。另一种可能是JS错误 - 确保在驱动程序注册中设置了js_errors:true。另外,请确保您正在运行PhantomJS 2.1.1 +