1. 程式人生 > >python+selenium之處理alert彈出對話方塊

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()