Selenium WebDriver, как закрыть всплывающее окно браузера - PullRequest
36 голосов
/ 28 июля 2011

Я пишу тесты для веб-приложения, использующего selenium webDriver, и столкнулся со сценарием, в котором при попытке закрыть браузер появляется всплывающее окно с сообщением «Вы уверены? введенные данные будут потеряны. " с двумя кнопками: покинуть страницу и остаться на странице

Как мне нажать на эти кнопки?

Ответы [ 9 ]

24 голосов
/ 12 августа 2011
 ( ( JavascriptExecutor ) _driver )
            .executeScript( "window.onbeforeunload = function(e){};" );

решил проблему для меня

16 голосов
/ 14 декабря 2011
IAlert alert = driver.SwitchTo().Alert();

alert.Accept(); //for two buttons, choose the affirmative one
// or
alert.Dismiss(); //to cancel the affirmative decision, i.e., pop up will be dismissed and no action will take place
11 голосов
/ 26 марта 2012

Вы можете взаимодействовать с оповещениями и т.п., используя Alert API . Переключитесь на предупреждение и подтвердите, что это будет выглядеть так (на Java):

Alert alert = driver.switchTo().alert();
alert.accept();

Это также объясняется в Selenium FAQ .

6 голосов
/ 05 июня 2012
def close_all_popups(driver):
    driver.window_handles
    for h in driver.window_handles[1:]:
        driver.switch_to_window(h)
        driver.close()
    driver.switch_to_window(driver.window_handles[0])
1 голос
/ 05 августа 2011

Вы можете попробовать использовать события клавиатуры. Итак, когда всплывает окно:

Нажмите на кнопку «ОК».

driver.Keyboard.PressKey(Keys.Tab);

Вам придется поиграть, чтобы узнать, сколько нажатий на вкладки требуется.

Затем нажмите пробел.

driver.Keyboard.PressKey(Keys.Space);

Да, это своего рода хак, но WebDriver все еще довольно незрелый.

РЕДАКТИРОВАТЬ: Это будет работать для «настоящих» всплывающих окон, но, как сказал другой ответчик, возможно, не для странных вещей на странице. По сути, если вы можете вручную перейти к кнопке закрытия, этот метод должен сработать.

1 голос
/ 05 августа 2011

Не уверен, какова структура всплывающего окна, которое вы использовали. Вот некоторые из них, которые могут работать для вас, если вы использовали любой из всплывающих окон.

Если это предупреждение. Вы можете попробовать:

driver.SwitchTo().Alert()

Если это всплывающее окно, то:

driver.SwitchTo().Window(<windowname>)

Для iFrame:

driver.SwitchTo().Frame("iFrmLinks")

Как только вы пройдете любую из трех, вы сможете получить доступ ко всем ее внутренним элементам.

С уважением Тахир

0 голосов
/ 11 августа 2016

Вы должны обрабатывать неожиданные оповещения, используя блоки try catch. Поместите ваш код в блок try и поймайте исключение UnhandledAlertException

Пример:

try{
     .....
     .....
     code here
}catch(UnhandledAlertException e ){
    driver.switchto().alert().dismiss();
}
0 голосов
/ 13 августа 2014

У меня та же проблема, когда у меня есть форма полей и кнопка «Закончено редактирование», потому что, когда Selenium IDE автоматически щелкает по функции javascript, она отвечает за отключение окна подтверждения (покинуть страницу или еще на ней) , это не принимает событие мыши mouseup, которое означает, что window.confirm все еще работает и тест автоматического прохождения был неудачным. Мое решение - переопределить функцию javascript window.onbeforeunload в этом случае (не нужно спрашивать, знаем ли мы, что мы делаем, когда записываем тест в Selenium IDE). Вы можете запустить скрипт переопределения в IDE Selnium, прежде чем нажимать кнопку «Сохранить» (или что-то в этом роде) через selenium.runScript - просто отключите окно подтверждения.

    Command: runScript
    Target: {window.onbeforeunload=function(e){};}
0 голосов
/ 28 июля 2011

Поместите один из них перед событием щелчка:

selenium.chooseCancelOnNextConfirmation()

selenium.chooseOkOnNextConfirmation()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...