Я использую Ruby on Rails с Cucumber и Capybara.
Как мне протестировать простую команду подтверждения («Вы уверены?»)?
Кроме того, где я могу найти дополнительную документацию по этому вопросу?
Я использую Ruby on Rails с Cucumber и Capybara.
Как мне протестировать простую команду подтверждения («Вы уверены?»)?
Кроме того, где я могу найти дополнительную документацию по этому вопросу?
Похоже, что в Capybara, к сожалению, этого не сделать. Но если вы запускаете свои тесты с драйвером Selenium (и, возможно, с другими драйверами, поддерживающими JavaScript), вы можете его взломать. Непосредственно перед выполнением действия, которое вызовет диалоговое окно подтверждения, переопределите метод confirm
, чтобы он всегда возвращал true. Таким образом, диалоговое окно никогда не будет отображаться, и ваши тесты могут продолжаться, как если бы пользователь нажал кнопку ОК. Если вы хотите смоделировать обратное, просто измените его так, чтобы он возвращал false.
page.evaluate_script('window.confirm = function() { return true; }')
page.click('Remove')
Драйвер selenium теперь поддерживает это
Из Capybara вы получите доступ к нему следующим образом:
page.driver.browser.switch_to.alert.accept
or
page.driver.browser.switch_to.alert.dismiss
or
page.driver.browser.switch_to.alert.text
page.driver.browser
в ответе Дерека.
- person Peter Nixey; 31.07.2011
Я реализовал эти два веб-шага в /features/step_definitions/web_steps.rb
:
When /^I confirm popup$/ do
page.driver.browser.switch_to.alert.accept
end
When /^I dismiss popup$/ do
page.driver.browser.switch_to.alert.dismiss
end
Если вы хотите специально протестировать отображаемое сообщение, вот особенно хитрый способ сделать это. Я не одобряю его как красивый код, но он выполняет свою работу. Вам нужно будет загрузить http://plugins.jquery.com/node/1386/release, или измените его, чтобы файлы cookie были изначально, если вам не нужен jQuery.
Используйте такую историю:
Given I am on the menu page for the current booking
And a confirmation box saying "The menu is £3.50 over budget. Click Ok to confirm anyway, or Cancel if you want to make changes." should pop up
And I want to click "Ok"
When I press "Confirm menu"
Then the confirmation box should have been displayed
И эти шаги
Given /^a confirmation box saying "([^"]*)" should pop up$/ do |message|
@expected_message = message
end
Given /^I want to click "([^"]*)"$/ do |option|
retval = (option == "Ok") ? "true" : "false"
page.evaluate_script("window.confirm = function (msg) {
$.cookie('confirm_message', msg)
return #{retval}
}")
end
Then /^the confirmation box should have been displayed$/ do
page.evaluate_script("$.cookie('confirm_message')").should_not be_nil
page.evaluate_script("$.cookie('confirm_message')").should eq(@expected_message)
page.evaluate_script("$.cookie('confirm_message', null)")
end
Обновление для текущих выпусков Capybara. Большинство драйверов Capybara сегодня поддерживают модальный API. Чтобы принять модальное окно подтверждения, вы должны сделать
accept_confirm do # dismiss_confirm if not accepting
click_link 'delete' # whatever action triggers the modal to appear
end
Это можно использовать в огурце с чем-то вроде
When /^(?:|I )press "([^"]*)" and confirm "([^"]*)"$/ do |button, msg|
accept_confirm msg do
click_button(button)
end
end
который щелкнет названную кнопку, а затем примет окно подтверждения с текстом, совпадающим с сообщением
Prickle добавляет несколько удобных удобных методов для работы со всплывающими окнами в selenium и webkit.
Эта суть содержит шаги по тестированию диалогового окна подтверждения JS в Rails 2 и 3 с любым драйвером Capybara.
Это адаптация предыдущего ответа, но не требует плагина jQuery Cookie.
Пробовал приведенные выше ответы безуспешно. В конце концов, это сработало для меня:
@browser.alert.ok