python+selenium之處理alert彈出對話方塊
注:本篇文章轉載 http://www.cnblogs.com/mengyu/p/6952774.html
當我們登入某些介面的時候,輸入使用者名稱和密碼錯誤,會彈出一個alert(警告)對話方塊,如果不叉掉它是沒法繼續執行下去,所以無法通過定位的方式定位它的位置。
我們的彈出對話方塊主要分為三種類型:“警告訊息框”,“確認訊息框”,“提示訊息對話”三種類型的對話方塊。
1.警告訊息框(alert)
警告訊息框提供了一個“確定”按鈕讓使用者關閉該訊息框,而且該訊息框是模式對話方塊,也就是說使用者必須先關閉該訊息框然後才能繼續進行操作。
2.確認訊息框(confirm)
確認訊息框向用戶提示一個“是與否”問題,使用者可以根據選擇“確定”按鈕和“取消”按鈕。
3.提示訊息對話(prompt)
提示訊息框提供一個文字欄位,使用者可以在此欄位輸入一個答案來響應您的提示。有一個“確定”按鈕和“取消”按鈕。選擇“確認”會響應對應的提示資訊,選擇“取消”會關閉對話方塊。
selenium提供switch_to_alert()方法定位到alert/confirm/prompt對話方塊。使用text/accept/dismiss/send_keys進行操作,這裡注意的是send——keys只能對prompt操作,因為只有它是要輸入內容的。
switch_to_alert() #定位彈出對話
text() #獲取對話方塊文字值
accept() #相當於點選“確認”
dismiss() #相當於點選“取消”
send_keys() #輸入值,這個alter和confirm沒有輸入對話方塊,所以這裡不能用,只能用於prompt
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title></title> </head> <body> <div align="center"> <h4>hello girl</h4> <input type="button" onclick="showPro()" value="輸入框彈窗按鈕"/> <input type="button" onclick="showAlert2()" value="提示彈窗按鈕"/> <input type="button" onclick="showAlert()" value="確認彈窗按鈕"/><br><br><br> <span id="textSpan"></span> </div> </body> <script> function showAlert(){ document.getElementById("textSpan").innerHTML=""; if(confirm("你是帥哥嗎?")){ document.getElementById("textSpan").innerHTML="<font style='color: red;'>您為何如此自信?</font>"; }else{ document.getElementById("textSpan").innerHTML="<font style='color: red;'>您為何如此謙虛?</font>"; } } function showPro(){ document.getElementById("textSpan").innerHTML=""; con = prompt("輸入1為強哥聰明,輸入2為左哥笨"); if(con==1){ document.getElementById("textSpan").innerHTML="<font style='color: green;'>強哥是真聰明啊</font>"; }else if(con==2){ document.getElementById("textSpan").innerHTML="<font style='color: green;'>左哥是真笨啊</font>"; }else{ document.getElementById("textSpan").innerHTML="<font style='color: red;'>您沒有按要求輸入,請重新輸入</font>"; } } function showAlert2(){ document.getElementById("textSpan").innerHTML=""; alert("用我三世煙火,換你一世迷離"); } </script> </html>
下面三個例子,主要來演示如何處理上面說的三種對話方塊。
1.處理alert對話方塊
#-*-coding:utf-8 -*-
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('file:///C:/Users/hunk/Desktop/alter.html')
'''獲取alert對話方塊的按鈕,點選按鈕,彈出alert對話方塊'''
driver.find_element_by_xpath('/html/body/div/input[2]').click()
'''獲取alert對話方塊'''
alert = driver.switch_to_alert()
'''新增等待時間'''
time.sleep(2)
'''獲取警告對話方塊的內容'''
print (alert.text) #列印警告對話方塊內容
alert.accept() #alert對話方塊屬於警告對話方塊,我們這裡只能接受彈窗
'''新增等待時間'''
time.sleep(2)
driver.quit()
2.處理confirm對話方塊
#-*-coding:utf-8 -*-
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('file:///C:/Users/hunk/Desktop/alter.html')
'''獲取confirm對話方塊的按鈕,點選按鈕,彈出confirm對話方塊'''
driver.find_element_by_xpath('/html/body/div/input[3]').click()
'''獲取confirm對話方塊'''
dialog_box = driver.switch_to_alert()
'''新增等待時間'''
time.sleep(2)
'''獲取對話方塊的內容'''
#列印警告對話方塊內容
print (dialog_box.text)
'''點選【確認】顯示"您為何如此自信?"'''
dialog_box.accept() #接受彈窗
#列印接受對話方塊後的提示資訊
print (driver.find_element_by_xpath('//*[@id="textSpan"]/font').text)
time.sleep(2)
'''再次獲取confirm對話方塊的按鈕,點選按鈕,彈出confirm對話方塊'''
driver.find_element_by_xpath('/html/body/div/input[3]').click()
'''再次獲取confirm對話方塊'''
dialog_box = driver.switch_to_alert()
'''點選【取消】顯示"您為何如此謙虛?"'''
time.sleep(2)
dialog_box.dismiss() #關閉獲取取消對話方塊
print (driver.find_element_by_xpath('//*[@id="textSpan"]/font').text)
driver.quit()
3.處理prompt對話方塊
#-*-coding:utf-8 -*-
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
'''獲取對話方塊輸入2,並且點選【確認】,文字框內提示<左哥是真笨啊>,點選【取消】文字框內提示<您沒有按要求輸入,請重新輸入>'''
driver.get('file:///C:/Users/hunk/Desktop/alter.html')
'''獲取prompt對話方塊的按鈕,點選按鈕,彈出confirm對話方塊'''
driver.find_element_by_xpath('/html/body/div/input[1]').click()
'''獲取prompt對話方塊'''
dialog_box = driver.switch_to_alert()
'''新增等待時間'''
time.sleep(2)
'''獲取對話方塊的內容'''
print (dialog_box.text) #列印警告對話方塊內容
dialog_box.send_keys("2") #彈出框內輸入2
dialog_box.accept() #接受
print (driver.find_element_by_xpath('//*[@id="textSpan"]/font').text) #獲取關閉彈窗結果 #獲取確認彈窗結果
'''這裡等待幾秒在測試取消'''
time.sleep(2)
#************************點選【取消】,並且獲取顯示結果**********************
driver.find_element_by_xpath('/html/body/div/input[1]').click()
'''獲取prompt對話方塊'''
dialog_box = driver.switch_to_alert()
'''新增等待時間'''
time.sleep(2)
dialog_box.dismiss() #關閉對話方塊
print (driver.find_element_by_xpath('//*[@id="textSpan"]/font').text) #獲取關閉彈窗結果
time.sleep(2)
driver.quit()