Я використовую Ruby on Rails з огірком і капібарою.
Як би я протестував просту команду підтвердження ("Ви впевнені?")?
Крім того, де я можу знайти подальшу документацію з цього питання?
Я використовую Ruby on Rails з огірком і капібарою.
Як би я протестував просту команду підтвердження ("Ви впевнені?")?
Крім того, де я можу знайти подальшу документацію з цього питання?
Відповіді:
Здається, на жаль, у Капібарі це зробити неможливо. Але якщо ви запускаєте свої тести з драйвером Selenium (і, мабуть, іншими драйверами, що підтримують JavaScript), ви можете його зламати. Перед тим, як виконати дію, яка призведе до діалогового вікна підтвердження, перевизначте confirm
метод, щоб завжди повертати true. Таким чином діалогове вікно ніколи не відображатиметься, і ваші тести можуть продовжуватися так, ніби користувач натиснув кнопку OK. Якщо ви хочете імітувати зворотне, просто змініть його, щоб повернути false.
page.evaluate_script('window.confirm = function() { return true; }')
page.click('Remove')
Драйвер селену тепер це підтримує
З Capybara ви отримали б до нього доступ таким чином:
page.driver.browser.switch_to.alert.accept
або
page.driver.browser.switch_to.alert.dismiss
або
page.driver.browser.switch_to.alert.text
page.driver.browser
у відповіді Дерека
Якщо ви хочете спеціально протестувати повідомлення, що відображається, ось особливо шалений спосіб це зробити. Я не схвалюю це як прекрасний код, але це робить роботу. Вам потрібно буде завантажити 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
який натисне на названу кнопку, а потім прийме поле підтвердження з текстовим повідомленням
Водосвинка-WebKit драйвер підтримує це , а також.
Scenario: Illustrate an example has dialog confirm with text
#
When I confirm the browser dialog with tile "Are you sure?"
#
=====================================================================
my step definition here:
And(/^I confirm the browser dialog with title "([^"]*)"$/) do |title|
if page.driver.class == Capybara::Selenium::Driver
page.driver.browser.switch_to.alert.text.should eq(title)
page.driver.browser.switch_to.alert.accept
elsif page.driver.class == Capybara::Webkit::Driver
sleep 1 # prevent test from failing by waiting for popup
page.driver.browser.confirm_messages.should eq(title)
page.driver.browser.accept_js_confirms
else
raise "Unsupported driver"
end
end
Ця суть містить кроки для перевірки діалогового вікна підтвердження JS на рейках 2 та 3 за допомогою будь-якого драйвера Capybara.
Це адаптація попередньої відповіді, але не потребує плагіна jQuery Cookie.
Спробував вищевказані відповіді без удачі. Врешті-решт це спрацювало для мене:
@browser.alert.ok