Нажмите кнопку ОК внутри оповещения (Selenium IDE) - PullRequest
64 голосов
/ 28 августа 2009

Мне нужно нажать кнопку «ОК» внутри окна предупреждения с помощью команды Selenium . Я пробовал assertAlert или verifyAlert, но они не делают то, что я хочу.

Возможно ли нажать кнопку «ОК»? Если да, может ли кто-нибудь дать мне пример команды Selenium IDE?

Ответы [ 13 ]

49 голосов
/ 08 февраля 2011

Попробуйте Selenium 2.0b1. У него другое ядро, чем у первой версии. Он должен поддерживать всплывающие диалоги в соответствии с документацией :

Всплывающие диалоги

Начиная с Selenium 2.0 beta 1, встроена поддержка обработки всплывающих диалоговых окон. После запуска и действия, которое откроет всплывающее окно, вы можете получить доступ к предупреждению с помощью следующего:

Java

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

рубин

driver.switch_to.alert

Это вернет текущий открытый объект оповещения. С помощью этого объекта вы теперь можете принимать, отклонять, читать его содержимое или даже вводить подсказки. Этот интерфейс одинаково хорошо работает при оповещениях, подтверждениях, подсказках. Обратитесь к JavaDocs для получения дополнительной информации.

40 голосов
/ 22 февраля 2011

Чтобы нажать кнопку «ОК» в окне предупреждения:

driver.switchTo().alert().accept();
10 голосов
/ 25 мая 2012

Это ответ с 2012 года, вопрос с 2009 года, но люди все еще смотрят на него, и есть только один правильный (используйте WebDriver) и один почти полезный (но недостаточно хороший) ответ.


Если вы используете Selenium RC и можете видеть диалоговое окно с предупреждением, это невозможно. Селен должен справиться с этим для вас. Но, как указано в документации Selenium :

Selenium пытается скрыть эти диалоги от вас (заменяя window.alert, window.confirm и window.prompt), чтобы они не остановили исполнение вашей страницы. Если вы видите всплывающее окно с предупреждением, вероятно, потому что это сработало во время процесса загрузки страницы, который как правило, нам еще рано защищать страницу.

Это известное ограничение Selenium RC (и, следовательно, Selenium IDE) и одна из причин, по которой был разработан Selenium 2 (WebDriver). Если вы хотите обрабатывать onload JS-оповещений, вам нужно , чтобы использовать WebDriver для обработки оповещений .

Тем не менее, вы можете использовать Robot или selenium.keyPressNative(), чтобы заполнить любой текст и нажать Введите и подтвердить диалог вслепую. Это не самый чистый способ, но это может сработать. Однако вы не сможете получить сообщение alert.

Robot имеет все полезные ключи, сопоставленные с константами, так что это будет легко. С keyPressNative() вы хотите использовать 10 в качестве значения для нажатия Введите или 27 для Esc , поскольку оно работает с ASCII-кодами .

4 голосов
/ 29 октября 2013

1 | Распечатать всплывающий текст с предупреждением и закрыть -I

Alert alert = driver.switchTo().alert();
System.out.println(closeAlertAndGetItsText());

2 | Распечатать всплывающий текст с предупреждением и закрыть -II

Alert alert = driver.switchTo().alert();
System.out.println(alert.getText()); //Print Alert popup
alert.accept(); //Close Alert popup

3 | Подтвердите всплывающий текст с предупреждением и закройте

Alert alert = driver.switchTo().alert();
assertEquals("Expected Value", closeAlertAndGetItsText());
4 голосов
/ 21 марта 2013

Если вы используете selenium IDE, то вы должны нажать кнопку Ok вручную, потому что, когда запускается команда с предупреждением, браузер перестает работать, и если вы хотите нажать кнопку ok автоматически, вы должны использовать selenium RC или webdriver и команду ниже. для Selenium IDE

В селене, то используйте команду storeeval, другой тип ящиков

    storeEval | alert("This is alert box")                           |
    storeEval | prompt("This is prompt box. Please enter the value") | text
    storeEval | confirm("this is cofirm box")   |
2 голосов
/ 08 февраля 2011

Вопрос не ясен - это для оповещения о загрузке страницы? Вы не должны видеть никаких диалоговых окон предупреждения при использовании Selenium, поскольку он заменяет alert() своей собственной версией, которая просто захватывает сообщение, предоставленное для проверки.

Selenium не поддерживает alert() при загрузке страницы, так как он должен исправить функцию в тестируемом окне своей собственной версией.

Если вы не можете избавиться от предупреждений о загрузке из тестируемого приложения, вам следует изучить использование автоматизации графического интерфейса пользователя для выбора всплывающих окон, например AutoIT , если вы используете Windows.

2 голосов
/ 28 августа 2009

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

1 голос
/ 27 сентября 2017

Используйте интерфейс оповещения, сначала switchTo() для предупреждения, а затем либо accept(), чтобы нажать OK, либо dismiss(), чтобы ОТМЕНИТЬ его

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

или

Alert alert_box = driver.switchTo().alert();
alert_box.dismiss(); 
0 голосов
/ 03 марта 2019

Новая Selenium IDE (выпущенная в 2019 году) имеет гораздо более широкий API и новую документацию.

Полагаю, вы захотите попробовать эту команду:

WebDriver выбрать ОК при видимом подтверждении

Описано по адресу:

https://www.seleniumhq.org/selenium-ide/docs/en/api/commands/#webdriver-choose-ok-on-visible-confirmation

Существуют другие вызовы API, связанные с оповещениями; просто найдите на этой странице alert

0 голосов
/ 03 апреля 2018

Это Pythoncode
Проблема с окнами оповещений (особенно сладкие оповещения в том, что у них есть задержка и селен слишком быстро)

Опция, которая сработала для меня:

while True:
    try:
        driver.find_element_by_xpath('//div[@class="sweet-alert showSweetAlert visible"]')
        break
    except:
        wait = WebDriverWait(driver, 1000)

confirm_button = driver.find_element_by_xpath('//button[@class="confirm"]')
confirm_button.click()
...