Как понять, что на странице есть предупреждение или нет с использованием Selenium в Python? - PullRequest
1 голос
/ 14 апреля 2019

Существует множество решений для взаимодействия с alerts на веб-страницах с использованием Selenium в Python.Но я хочу, чтобы решение обнаружило, что страница имеет alert или нет.Использование Try & except - очень плохое решение в моем случае.Так что не представляй это.Я хочу просто простое if & else решение.Это мое решение:

if driver.switch_to_alert()
  alert = driver.switch_to_alert()
  alert.accept()
else:
  print('hello')

NoAlertPresentException: no such alert
  (Session info: chrome=73.0.3683.103)
  (Driver info: chromedriver=2.46.628402 (536cd7adbad73a3783fdc2cab92ab2ba7ec361e1),platform=Windows NT 10.0.16299 x86_64)

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Вы можете сделать:

driver.executeScript("window.alert = () => window.alertHappened = true")
// some code here that may cause alert
alert_happened = driver.executeScript("return !!window.alertHappened")
1 голос
/ 14 апреля 2019

Когда вы автоматизируете Регрессивные тестовые случаи , вы всегда будете в курсе, что на веб-странице есть предупреждение . В соответствии с текущей реализацией для переключения на Alert вам необходимо использовать:

  • switch_to.alert() следующим образом:

    selenium.webdriver.common.alert 
    driver.switch_to.alert().accept()
    
  • В соответствии с рекомендациями, вы всегда должны вызывать WebDriverWait для alert_is_present() при переключении на Alert следующим образом:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    # other lines of code
    WebDriverWait(driver, 5).until(EC.alert_is_present).accept()
    
  • Чтобы убедиться, что на странице есть Alert или нет, идеальным подходом было бы заключаться в том, чтобы обернуть кодовый блок обработки предупреждений в блок try-catch{} следующим образом:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.common.exceptions import TimeoutException
    
    try:
        WebDriverWait(driver, 5).until(EC.alert_is_present).accept()
        print("Alert accepted")
    except TimeoutException:
        print("No Alert was present")
    

Ссылка

Вы можете найти пару соответствующих обсуждений в:


Outro

В некоторых случаях вам может понадобиться взаимодействовать с элементами, которые невозможно проверить с помощью css / xpath в google-chrome-devtools, и вы найдете подробное обсуждение в Как взаимодействовать с элементами, которые невозможно проверить через css / xpath в google-chrome-devtools

...