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ą przyciskCANCELprompt()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)
furas.pl