Загрузка Capybara и Javascript в ускоренном режиме

#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