Selenium彈框處理

jongjongjong發表於2024-10-29

Selenium中有三種彈框,本文介紹了處理三種彈框的方法

一、Selenium三種彈框

alert:用來提示,顯示一個帶有指定訊息和確認按鈕的警告框
confirm:用於確認,顯示一個帶有指定訊息和確定及取消按鈕的對話方塊
prompt:用於使用者輸入內容,顯示可進行輸入的對話方塊
這三種彈框不是html的頁面元素,而是javascript的控制元件,所以不能用傳統的方法去操作,需要用另外的方法操作,下面介紹處理三種彈框的方法已經彈框的屬性:
(1)accept():用於確認,適用三種彈框
(2)dismiss():用於取消,適用三種彈框
(3)send_keys():僅適用於prompt方法,用於輸入文字
(4)text:用於獲取提示的文字值

二、定義form表單

定義三個超連結,點選分別彈出不同彈框

<a href="javascript:alert('提示框')" id="alert">Alert</a><br>
<a href="javascript:confirm('確認刪除嗎')" id="confirm">Confirm</a><br>

prompt返回內容存在變數age中,取到返回值後將變數寫入頁面
<a href="javascript:var age=prompt('請輸入年齡');document.write(age)" id="prompt">Prompt</a><br>

介面如下

三、表單測試

1、alert測試

(1)用例1:點選超連結alert
結果1:彈出alert型別彈窗
image
自動化程式碼:直接呼叫WebElement類中的click()方法

self.driver.find_element(By.ID,"alert").click()#點選超連結alert

(2)用例2:彈框中點選確定
結果2:彈框消失
image

自動化程式碼:
首先需要將Webdriver的作用域從主視窗切到彈框上,操作三種彈框:alert、confirm、prompt前,都需要執行該操作,用到的方法是self.driver.switch_to.alert,第二步就可以在彈框中操作,點選確定,用到的方法是accept()

alert=self.driver.switch_to.alert#由主視窗切換到alert,返回一個alert物件
sleep(2)
#print(alert.text)
alert.accept()#點選確定
sleep(2)
2、confirm測試

(1)用例1:點選超連結confirm
結果2:彈出confirm型別的彈框
image

自動化程式碼:同樣直接呼叫WebElement類中的click()方法

self.driver.find_element(By.ID,"confirm").click()#點選confirm超連結

(2)用例2:點選確定
結果2:彈框消失
image
自動化程式碼:
用到的方法是accept()

confirm=self.driver.switch_to.alert#切換至confirm彈框
sleep(2)
print(confirm.text)#列印彈窗中文字
confirm.accept()#點選確定
sleep(2)

(3)用例3:點選取消
結果3:彈框消失
image
自動化程式碼:用到的方法是dismiss()

confirm.dismiss()#點選取消
sleep(2)
3、prompt測試

(1)用例1:點選超連結prompt
結果1:彈出prompt型別彈框
image

自動化程式碼:直接呼叫WebElement類中的click()方法

self.driver.find_element(By.ID,"prompt").click()

(2)用例2:輸入內容並確認
用例2:文字成功輸入並寫入頁面
image

image

自動化程式碼:
輸入文字用到的是send_keys()方法,點選確定用到的是accept()

prompt=self.driver.switch_to.alert#切換到prompt彈框
sleep(2)
prompt.send_keys('12')
sleep(2)
prompt.accept()
sleep(2)

三、總程式碼

點選檢視程式碼
from selenium import webdriver
from time import sleep
import os
from selenium.webdriver.common.by import By

class TestCase(object):
    def __init__(self):
        self.driver=webdriver.Edge()
        path=os.path.dirname(os.path.abspath(__file__))
        file_path="file:///"+path+"/form3.html"
        self.driver.get(file_path)

    def test_alert(self):
        self.driver.find_element(By.ID,"alert").click()#點選alert超連結
        alert=self.driver.switch_to.alert#切換到彈窗,返回一個物件
        sleep(2)
        print(alert.text)#可以列印text內容確定
        alert.dismiss()#點選確定
        sleep(2)

    def test_confirm(self):
        self.driver.find_element(By.ID,"confirm").click()#點選confirm超連結
        confirm=self.driver.switch_to.alert#切換至confirm彈框
        sleep(2)
        print(confirm.text)#列印彈窗中文字
        confirm.accept()#點選確定
        sleep(2)
        confirm.dismiss()#點選取消
        sleep(2)

    def test_prompt(self):
        self.driver.find_element(By.ID,"prompt").click()
        prompt=self.driver.switch_to.alert#切換到prompt彈框
        sleep(2)
        prompt.send_keys('12')
        sleep(2)
        prompt.dismiss()
        sleep(2)

if __name__=="__main__":
    case=TestCase()
    #case.test_alert()
    #case.test_confirm()
    case.test_prompt()

相關文章