Selenium: Jak zamknąć alert stworzony przez JavaScript
JavaScript może tworzyć trzy standarowe wyskakujące alerty: alert()
, confirm()
lub prompt()
.
- wszystkie z nich mają przycisk
OK
confirm()
iprompt()
mają przyciskCANCEL
prompt()
ma pole tekstowe
Aby wcisnąć OK
driver.switch_to.alert.accept() # press 'OK'
Aby wcisnąć CANCEL
(tylko w confirm()
i prompt()
)
driver.switch_to.alert.dismiss() # press 'Cancel'
Aby wstawić jakiś tekst w prompt()
przez zaakceptowaniem
prompt = driver.switch_to.alert
prompt.send_keys('foo bar')
prompt.accept()
Prawdopodobnie w innych językach jest funkcja get_alert()
, która pozwala sprawdzić czy alert jest aktualnie wyświetlany ale Python nie ma takiej funkcji.
Ale można kod umieścić w try/except
aby go przechwycić błąd gdy alert nie jest aktualnie wyświetlany.
try:
driver.switch_to.alert.accept()
except Exception as ex:
print('Exception:', ex)
Minimalny przykład.
Ponieważ nie znam strony, która wyświetla alert więc użyłem execute_script()
aby wyświetlić alert.
Używam także console.log()
aby zobaczyć w DevTool
jaki wynik jest wysyłany do JavaScript
.
Pierwsza część sprawdza kod gdy alert jest wyświetlany. Druga część sprawdza kod gdy nie ma alertu.
from selenium import webdriver
import time
#driver = webdriver.Firefox()
driver = webdriver.Chrome()
driver.get('http://google.com')
# --- test when there is alert ---
driver.execute_script("console.log('alert: ' + alert('Hello World!'))")
#driver.execute_script("console.log('alert: ' + confirm('Hello World!'))")
#driver.execute_script("console.log('alert: ' + prompt('Hello World!'))")
time.sleep(2)
try:
driver.switch_to.alert.accept() # press OK
#driver.switch_to.alert.dismiss() # press CANCEL
except Exception as ex:
print('Exception:', ex)
# --- test when there is no alert ---
try:
driver.switch_to.alert.accept() # press OK
#driver.switch_to.alert.dismiss() # press CANCEL
except Exception as ex:
print('Exception:', ex)
# ---
driver.save_screenshot('image.png')
driver.close()
Jeśli chcesz najpierw wcisnąć CANCEL
a to nie działa to wcisnąć OK
try:
driver.switch_to.alert.dismiss() # press CANCEL
except Exception as ex:
print('Exception:', ex)
try:
driver.switch_to.alert.accept() # press OK
except Exception as ex:
print('Exception:', ex)
Buy a Coffee