一、Alert/Confirm/Prompt彈出窗口特征說明
Alert彈出窗口:
提示用戶信息只有確認按鈕,無法通過頁面元素定位,不關閉窗口無法在頁面上做其他操作。

Confirm 彈出窗口:
有確認和取消按鈕,該彈出窗口無法用頁面元素定位,不關閉窗口無法在頁面上做其他操作。

Prompt彈出窗口:
有輸入框、確認和取消按鈕,該彈出窗口無法用頁面元素定位,不關閉窗口無法在頁面上做其他操作。

注意:3種窗口為瀏覽器自帶的窗口,該窗口無法定位到元素,能定位到元素需要使用WebElement操作。
二、Alert/Confirm/Prompt彈出窗口操作
第一步:需要獲取彈出窗口,兩種方法 與Alert(driver)
alert=driver.switch_to.alert
或
from selenium.webdriver.common.alert import Alert alert=Alert(driver)
第二步:對獲取到的窗口進行操作,常用方法如下:
alert.text() # 獲取窗口信息 alert.accept() # 確認 alert.dismiss() # 取消 alert.send_keys(keysToSend) # 輸入信息
alert.authenticate(username, password) # 用戶認證信息登錄,已有確認操作
三、實例說明
創建下面3個html文件
alertTest.html
<html> <head> <title>Alert Test</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> </head> <script type="text/javascript"> function showAlert(){ alert(document.from1.t1.value); } function showMultilineAlert(){ alert("你必須糾正以下錯誤:\n你必須輸入XXXX.\n你必須做XXXX.\n你必須XXXX"); } </script> <body> <h2>Alert Test</h2> <form name="from1"> <input type="text" name="t1" value="可以輸入 Alert 信息"><br><br> <input type="button" name="button1" value="點擊Alert獲取輸入框信息" onclick="showAlert()"><br><br> <input type="button" name="button2" value="Alert自帶多行文本信息" onclick="showMultilineAlert()"><br> </form> </body> </html>
confirmTest.html
<html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> <title>Confirm Test</title> </head> <script type="text/javascript"> function showConfirm(){ var t1 = document.from1.t1; if (confirm("請點擊確認或取消")){ t1.value = "確認"; }else{ t1.value = "取消"; } } </script> <body> <h2>Confirm Test</h2> <form name="from1"> <input type="button" name="button1" value="點擊Confirm按鈕" onclick="showConfirm()"><br><br> <input type="text" name="t1"> </form> </body> </html>
promptTest.html
<html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> <title>Prompt Test</title> </head> <script type="text/javascript"> function showPrompt(){ var t1 = document.from1.t1; t1.value = prompt("請輸入信息,信息將填入頁面輸入框."); } </script> <body> <h2>Prompt Test</h2> <form name="from1"> <input type="button" name="button1" value="點擊Prompt按鈕" onclick="showPrompt()"><br><br> <input type="text" name="t1"> </form> </body> </html>
示例1:Alert彈窗獲取文本與確認操作
from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support.expected_conditions import alert_is_present from selenium.webdriver.common.alert import Alert driver = webdriver.Chrome() driver.get(r'E:\XXX\alertTest.html') driver.find_element_by_name('button1').click() # 點擊第一個按鈕 WebDriverWait(driver, 5).until(alert_is_present()) # 等待彈出窗口出現 alert = driver.switch_to.alert # 獲取彈出窗口 text1 = alert.text # 獲取窗口文本信息 print(text1) # 打印窗口文本信息 alert.accept() # 確認 print('----------') driver.find_element_by_name('button2').click() # 點擊第二個按鈕 WebDriverWait(driver, 5).until(alert_is_present()) # 等待彈出窗口出現 alert = Alert(driver) # 獲取彈出窗口 text1 = alert.text # 獲取窗口文本信息 print(text1) # 打印窗口文本信息 alert.accept() # 確認 driver.quit()
注意:WebDriverWait(driver, 5).until(alert_is_present()) 加上這個可提高代碼的可靠性
示例2:Comfirm彈窗獲取文本、確認、取消操作
driver = webdriver.Chrome() driver.get(r'E:\XXX\confirmTest.html') driver.find_element_by_name('button1').click() # 點擊按鈕 WebDriverWait(driver, 5).until(alert_is_present()) # 等待彈出窗口出現 alert = driver.switch_to.alert # 獲取彈出窗口 print(alert.text) # 打印窗口信息 alert.accept() # 確認 time.sleep(2) driver.find_element_by_name('button1').click() # 點擊按鈕 WebDriverWait(driver, 5).until(alert_is_present()) # 等待彈出窗口出現 alert = driver.switch_to.alert # 獲取彈出窗口 alert.dismiss() # 取消 time.sleep(2) driver.quit()
示例3:Prompt 彈窗獲取文本、輸入內容、確認操作
driver = webdriver.Chrome() driver.get(r'E:\XXX\promptTest.html') driver.find_element_by_name('button1').click() # 點擊按鈕 WebDriverWait(driver, 5).until(alert_is_present()) # 等待彈出窗口出現 alert = Alert(driver) # Alert 獲取彈出窗口 alert.send_keys('selenium Alert彈出窗口輸入信息') # 輸入信息 alert.accept() # 確認 time.sleep(2) driver.quit()