Я запускаю автоматизированные (python) тесты селена в браузере Chrome, и иногда, когда страница перезагружается, на экране появляется всплывающее окно:
Можно ли настроить браузер chrome selenium таким образом, чтобы это всплывающее окно не появляется? Если да, то как это сделать? Или есть другие способы подавить это всплывающее окно? Или принять его?
Я знаю, что это не отвечает на часть вопроса о подавлении, но...
Попробуйте этот фрагмент кода для принятия всплывающего окна:
driver.SwitchTo().Alert().Accept();
Вы можете попробовать добавить блок «Try Except», чтобы попытаться переключиться на окно предупреждения.
Это всплывающее окно с текстом Перезагрузить сайт? Внесенные вами изменения могут быть не сохранены является реализацией свойства onbeforeunload
для WindowEventHandlers.
Свойство перед выгрузкой миксина WindowEventHandlers — это Обработчик события для обработки событий перед разгрузкой. Эти события срабатывают, когда окно собирается использовать разгружать свои ресурсы. В этот момент документ все еще виден, и событие все еще можно отменить.
Существуют различные стратегии для обработки этого выскакивать.
Решение Хром: использование от --disable-popup-blocking
до ChromeOptions():
from selenium import webdriver
options.add_argument("--disable-popup-blocking")
driver=webdriver.Chrome(chrome_options=options, executable_path=/path/to/chromedriver')
Решение Fire Fox: использование от dom.disable_beforeunload
до FirefoxПрофиль():
from selenium import webdriver
profile = webdriver.FirefoxProfile()
profile.set_preference("dom.disable_beforeunload", True)
driver = webdriver.Firefox(firefox_profile = profile)
Решение Кроссбраузерный: в качестве решения Кроссбраузерный вы можете отключить это диалоговое окно, вызывая executeScript()
, чтобы установить window.onbeforeunload как function() {};
, и вы можете использовать следующее решение:
driver.execute_script("window.onbeforeunload = function() {};")
Решение на основе JQuery:
$I->executeJS( "window.onbeforeunload = null" );
You can find a relevant discussion in How to handle below Internet Explorer popup “Are you sure you want to leave this page?” through Selenium
Я только что понял, что у меня уже есть этот флаг --disable-popup-blocking
для Chrome. Однако, похоже, он не работает должным образом. Время от времени я все еще получаю всплывающее окно (повторяя одну и ту же веб-страницу).
Вы пробовали решение Кроссбраузерный? Можете ли вы получить статус, пожалуйста?
когда я должен выполнить скрипт? Всего один раз после того, как я создал драйвер? Каждый раз на новой странице?
Всплывающее окно все еще иногда появляется.
Пожалуйста, проигнорируйте мой предыдущий комментарий. Везде, где вы просматриваете страницу и появляется это всплывающее окно, вам нужно добавить эту строку, чтобы избавиться от него.
Да, я думаю, я воспользуюсь этим предложением. Но оповещение выскакивает только иногда.