来自水豚的弃权警告
我正在使用rspec-rails 2.14.0.rc1和capybara 2.4.1从rails 3.2.19升级到rails 4.1.5。 所有测试都通过了,我只剩下一个弃用警告:
[DEPRECATION] Capybara::Webkit::Driver#accept_js_confirms! is deprecated. Please use Capybara::Session#accept_confirm instead.
导致这种情况的代码行是
page.driver.accept_js_confirms!
如何更改此行以消除弃用警告?
鉴于exception说:
请改用Capybara :: Session#accept_confirm。
你可能想要:
page.accept_confirm
请注意,正在对accept_confirm
:: Session而不是驱动程序运行accept_confirm
。
此方法需要一个触发确认警报的块出现。 例如:
page.accept_confirm do click_link('that_opens_confirm') end
Justin Ko的答案对于#accept_confirm的用法是正确的 – 就是这样
page.accept_confirm do #code that will trigger the modal end
或者你可以做到
page.accept_confirm 'Are you sure?' do #code that will trigger the modal end
这将validation“你确定吗?” 是确认框中显示的提示。
在你的失败测试中你是否碰巧先处理另一个模态? capybara-webkit有一个错误的多个模态,几天前修复 – https://github.com/thoughtbot/capybara-webkit/commit/86e422f94422d39e537329d64d7bfe8f6360bd8b 。 尽管如此,它还没有出现在版本中。
Justin Ko的回答让我获得了50/50的成功。 有效的代码有这样的代码:
link_to "Reset", reset_pre_shot_description_mental_game_path(@mental_game), data: {confirm: 'Are you sure?'}, class: "small_button round", id: "reset_pre-shot"
而这个测试:
page.accept_confirm do click_link "Reset" end
失败的测试(但代码在浏览器中有效)具有代码
link_to 'Delete', micropost, data: {confirm: 'Are you sure?'}, method: :delete
并测试
page.accept_confirm do click_link "Delete" end
失败的消息是
Failure/Error: page.accept_confirm do Capybara::ModalNotFound: Timed out waiting for modal dialog
我试过移动method: :delete
入到:data
哈希,但这没有帮助。
事实certificate,弃用警告实际上在代码中发现了两个错误,因为我使用rails 3语法进行确认,即不使用:data
hash,所以我的代码被破坏但是page.driver.accept_js_confirms!
测试没有把它拿起来。 因此,这值得追踪。
我更换了page.driver.accept_js_confirms! 有:
page.execute_script(’window.confirm = function(){return true}’)
测试通过了。
这来自这里的文档: http : //rubydoc.info/github/jnicklas/capybara/master/Capybara/Session#evaluate_script-instance_method
并从互联网的帮助。 现在,这还没有告诉我们如何使用accept_confirm所以我仍然在寻找答案。
实际代码如下所示:
# Execute the block, accepting a confirm. # # @macro modal_params # def accept_confirm(text_or_options=nil, options={}, &blk) if text_or_options.is_a? Hash options=text_or_options else options[:text]=text_or_options end driver.accept_modal(:confirm, options, &blk) end
老实说,我认为它只是page.accept_confirm与SOMETHING其他,但我无法弄清楚该块是什么或传递。
适合我的作品:
page.execute_script('window.confirm = function() { return true }')