Предупреждение об устаревании от Capybara
я обновляюсь с rails 3.2.19 до rails 4.1.5, используя rspec-rails 2.14.0.rc1 и капибара 2.4.1. Все тесты проходят, и у меня осталось только одно предупреждение:
[DEPRECATION] Capybara::Webkit::Driver#accept_js_confirms! is deprecated. Please use Capybara::Session#accept_confirm instead.
строка кода, которая вызывает это
page.driver.accept_js_confirms!
Как изменить эту строку, чтобы устранить предупреждение об устаревании?
5 ответов
учитывая, что исключение говорит:
пожалуйста, используйте Capybara::Session#accept_confirm вместо этого.
вы, вероятно, хотите:
page.accept_confirm
отметим, что accept_confirm
запускается против сеанса Capybara::вместо драйвера.
этот метод ожидает, что появится блок, который запускает оповещение подтверждения. Например:
page.accept_confirm do
click_link('that_opens_confirm')
end
ответ Джастина ко правильный в отношении использования #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
который подтвердит, что "вы уверены?"это приглашение отображается в поле подтверждения.
в вашем неудачном тесте вы случайно не имеете дело с другим модальным первым? капибара-webkit в была ошибка с несколькими модал, который был зафиксирован несколько дней назад - https://github.com/thoughtbot/capybara-webkit/commit/86e422f94422d39e537329d64d7bfe8f6360bd8b . Это еще не в relased версии.
у меня был успех 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
хэш, но это не помогло.
оказывается, что предупреждение об устаревании на самом деле нашел две ошибки в коде, так как я использовал синтаксис rails 3 для подтверждения, т. е. не использовал :data
хэш, поэтому мой код был сломан, но page.driver.accept_js_confirms!
тест не поднимал его. Так что это стоило выследить.
Я заменил страницы.водитель.accept_js_confirms! с:
страница.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
честно говоря, я думаю, что это просто страница.accept_confirm с чем-то еще, но я не могу понять, что или прохождение в этом блоке.