2014-02-14 2 views
1

Я использую Capybara с веб-селеном Selenium в своем тестовом наборе. Я заметил, что когда все тесты завершены, Selenium закрывает браузер, привязывая его к at_exit. Тем не менее, это вызывает проблемы, связанные с тем, что мое веб-приложение отображает диалоговое окно «Вы уверены, что хотите перейти»? onunload (Пожалуйста, не судите. Это приложение для интрасети, и пользователи специально запросили его). Поэтому, когда тесты выполняются, мой сценарий Cucumber терпит неудачу (хотя все мои шаги проходят), потому что был необработанный диалог Javascript confirm. Есть ли способ привязки после того, как Selenium пытается закрыть браузер и принять диалог?Обработка закрытия браузера при выполнении тестов

Update

Я считаю, что я нашел проблему с этим. Похоже, что после каждого теста Capybara сбрасывает браузер, очищая все файлы cookie и перемещаясь примерно до: blank. Это то, что вызывает открытие диалогового окна onbeforeunload (не browser.quit()). Я перекрестно размещаю в списке рассылки Capybara, чтобы попытаться получить помощь по этому поводу и опубликую все, что найду здесь.

+0

Хотя я не совсем знаком с креплениями, которые вы используете, делает 'driver.switch_to_alert() alert.confirm()' (для версии питона) не работает для вас? –

+0

Вот что мне нужно сделать, я просто не могу найти подходящее место для этого. Похоже, что либо Capybara, либо Cucumber закрывают браузер, когда тестовый сценарий завершен. Вот когда мне нужно переключиться на предупреждение и принять его. – Kyle

+0

Есть ли доступ к методу 'tearDown'? Не могли бы вы попробовать «попробовать/поймать»? –

ответ

0

Как я уже говорил в обновлении OP оказывается, что Капибара переходит к о: пусто, как в конце каждого сценария огурца. После разговора с jnicklas из команды Capybara кажется, что лучший способ справиться с этим - реализовать обработчик Cucumber after, который перемещается до того, как Капибара пытается и будет предупреждать об этом.

After do 
    # after each test navigate away before Capybara tries to so that we can appropriately handle the onbeforeunload dialog 
    if @browser 
    begin 
     @browser.navigate.to("about:blank") 
     @browser.switch_to.alert.accept 
    rescue Selenium::WebDriver::Error::NoAlertPresentError 
     # No alert was present. Don't need to do anything 
    end 
    end 
end 
-1

Как уже упоминалось, вызов driver.Quit() должен решить проблему, но если всплывающее окно вызывает проблему, которая препятствует закрытию браузера, устраните экземпляр. Простое решение состоит в том, чтобы обернуть ваш тест внутри предложения use.

using (IWebDriver driver = new FirefoxDriver()) 
{ 
    //Perform your test 
    driver.Quit(); 
} 
0

Если вы используете модуль тестовой структуры, как JUnit или TestNG, то, что я делаю, это annoations использование конфигурации, как @AfterTest или @AfterClass, чтобы выйти из браузера. Таким образом, во время проверки браузер всегда работает. Только до завершения блока @Test тестовый пример закроет экземпляр браузера.

Если вы используете Ruby, я предполагаю, что что-то похожее на это.

1

Возможно ли изменить контекст at_exit и принять или отклонить предупреждение. Что-то вроде этого

at_exit do 
    page.driver.browser.switch_to.alert.accept 
    #or 
    page.driver.browser.switch_to.alert.dismiss 
end 
+0

Спасибо за подсказку. Я попытался настроить свой собственный метод 'at_exit' (который, как представляется, запускается до' at_exit' Capybara. Проблема в том, что я не могу принять или отклонить предупреждение до закрытия браузера. Если я попытаюсь вызвать 'quit', а затем примите предупреждение, что это тоже не сработает (предупреждение уходит, а затем возвращается). – Kyle

Смежные вопросы