#javascript #ruby-on-rails #cucumber #capybara #webdriver
#javascript #ruby-on-rails #cucumber #capybara #webdriver
Вопрос:
У меня есть страница ‘ask_a_question’ с функцией onbeforeunload, которая предупреждает пользователя, прежде чем оставлять что-либо несохраненным (эй! вот ТАК:P). Я тестирую его с помощью cucumber с capybara и webdriver, добавляя тег @javascript, потому что он использует много javascript. Функция cucumber может выглядеть следующим образом:
@javascript
Scenario: add a question
Given I login as "Mauricio"
And I go to the create question page
Then I should see "Ask a Question" within "header"
Но как только тест завершается, Capybara (или WebDriver, я не знаю) пытается повторно использовать одно и то же окно браузера для других тестов, тогда отображается предупреждение onbeforeunload, прерывающее следующий тест.
Поскольку моя функция не заключается в закрытии или выходе из страницы как таковой. Я не думаю, что было бы хорошей идеей добавлять что-то для принятия предупреждения. Но, честно говоря, я совсем запутался.
Как я могу указать capybara использовать новое окно браузера для каждого теста @javascript или автоматически закрывать предупреждение onbeforeunload?
Спасибо
Ответ №1:
вы можете использовать page.driver.browser.switch_to.alert.dismiss (документы здесь), чтобы избавиться от предупреждения.
Вы могли бы поместить это в cucumber после перехвата
After "@javascript" do
page.driver.browser.switch_to.alert.dismiss
# or accept it if that is what you prefer
page.driver.browser.switch_to.alert.accept
end
Комментарии:
1. работает как чудо с page.driver.browser.switch_to.alert.accept пожалуйста, обновите ответ.
2. да, он закрывает оповещение, но не покидает текущую страницу. с помощью accept «вы действительно хотите покинуть страницу?» принимается, и страница оставляется.
3. У меня это решение не работает, я получаю сбой без описания в cukes, и кнопка «Принять» не нажата. Есть ли что-то еще, что мне нужно сделать, чтобы настроить это?
4. какую версию selenium вы используете?
5. Спасибо Дерек, ваш пост помог мне понять, что к этому диалогу можно получить доступ так же, как к оповещению.
Ответ №2:
Аналогичный ответ для всех, кто использует Rspec и Capybara. Этот код посещает ‘about: blank’ после каждого теста.
context 'page that displays an alert when navigating away' do
after(:each) do
begin
accept_confirm { visit('about:blank') }
rescue Capybara::ModalNotFound
# For examples that don't end with an alert
end
end
...
end