[DEPRECATION] Capybara::Webkit::Driver#accept_js_confirms! is deprecated. Please use Capybara::Session#accept_confirm instead.
导致这个问题的代码行是:
page.driver.accept_js_confirms!
如何更改这行以消除弃用警告?
[DEPRECATION] Capybara::Webkit::Driver#accept_js_confirms! is deprecated. Please use Capybara::Session#accept_confirm instead.
page.driver.accept_js_confirms!
如何更改这行以消除弃用警告?
考虑到异常信息提示:
请使用Capybara :: Session#accept_confirm。
您可能需要执行以下操作:
page.accept_confirm
请注意,accept_confirm
方法是针对Capybara::Session而不是驱动程序运行的。
该方法需要一个触发确认提示框出现的块。例如:
page.accept_confirm do
click_link('that_opens_confirm')
end
accept_confirm
之前是否能够点击按钮?那个“OK”按钮实际上是触发确认警报打开的按钮吗?该块不应该是关闭警报的按钮。 - Justin Kopage.accept_confirm do
#code that will trigger the modal
end
page.accept_confirm 'Are you sure?' do
#code that will trigger the modal
end
您需要验证确认框中显示的“您确定吗?”提示吗?
在您的失败测试中,您是否先处理了其他模态框?capybara-webkit 几天前修复了多个模态框的错误 - https://github.com/thoughtbot/capybara-webkit/commit/86e422f94422d39e537329d64d7bfe8f6360bd8b。但这还没有被发布。
我对Justin Ko的答案有一半的成功率。其中可行的代码如下:
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
哈希中,但这并没有帮助。
事实证明,弃用警告实际上发现了代码中的两个错误,因为我在使用 Rails 3 语法来确认,即没有使用 :data
哈希,所以我的代码已经损坏,但是 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.execute_script('window.confirm = function() { return true }')