測試學習記錄,僅供參考!

各種彈窗的處理

以測試網站 https://www.leafground.com/alert.xhtml 頁面中的 各種彈窗 為例;

1、在項目根目錄下新建一個名稱為 alert_handle.py 的 Python 文件;

從零開始到設計Python+Selenium自動化測試框架_實例化

2、之前在基礎知識 1 常用函數中有提到過警告窗的處理;

在回顧一下:在測試 web 系統的時候,會經常遇到很多種 JS 彈窗,得把彈出的對話框關閉才能繼續操作;

# 警告框的處理
# 使用 driver 對象 調用 switch_to 方法,然後在 .(點) 調用alert方法
alert = driver.switch_to.alert
# 用返回的對象 alert 去調用 accept() 來關閉彈窗
alert.accept()

例 1、簡單對話框

3、Alert (Simple Dialog),彈窗中只有一個 確定 按鈕;

從零開始到設計Python+Selenium自動化測試框架_根目錄_02

4、優化 alert_handle.py 文件;

先定位到元素點擊喚起彈窗,調用 driver 對象使用 switch_to 切換到 alert 彈窗上,然後把結果返回出去,用返回出去的結果對象調用裏面的點擊按鈕 accept 方法;

# 導包
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

# 實例化瀏覽器
driver = webdriver.Edge()
# 網址
my_url = 'https://www.leafground.com/alert.xhtml'
# 打開網頁
driver.get(my_url)
# 窗口最大化
driver.maximize_window()

# alert警告框處理
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt91"]/span[2]').click()
alert = driver.switch_to.alert
# 增加強制等待時間2秒查看效果
sleep(2)
# 點擊確定
alert.accept()

# 等待3秒
sleep(3)
# 關閉實例化瀏覽器
driver.quit()

例 2、確認對話框

5、Alert (Confirm Dialog),基於AlertDialog的 確認、取消 對話框;

從零開始到設計Python+Selenium自動化測試框架_根目錄_03

6、優化 alert_handle.py 文件;

同樣先定位到元素點擊喚起彈窗,調用 driver 對象使用 switch_to 切換到 alert 彈窗上,然後把結果返回出去,用返回出去的結果對象調用裏面的點擊 確定、取消 按鈕;

# 導包
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

# 實例化瀏覽器
driver = webdriver.Edge()
# 網址
my_url = 'https://www.leafground.com/alert.xhtml'
# 打開網頁
driver.get(my_url)
# 窗口最大化
driver.maximize_window()

# alert警告框處理
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt91"]/span[2]').click()
alert = driver.switch_to.alert
# 增加強制等待時間2秒查看效果
sleep(2)
# 點擊確定
alert.accept()

# Alert (Confirm Dialog),有確定和取消按鈕的彈框
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt93"]/span[2]').click()
alert = driver.switch_to.alert
sleep(2)
# alert.accept()
# 點擊取消
alert.dismiss()

# 等待3秒
sleep(3)
# 關閉實例化瀏覽器
driver.quit()

例 3、基本對話框

7、Sweet Alert (Simple Dialog),對話框蒙版之上,在父窗口最上層彈出一個窗口;

從零開始到設計Python+Selenium自動化測試框架_#學習_04

8、優化 alert_handle.py 文件;

先定位到元素點擊喚起彈窗,然後需要判斷能不能通過元素選擇器去定位直接找到,判斷彈窗是否存在內聯框架 iframe、frame 裏面,若存在內聯框架,則需要先切入到內聯框架中,若不在內聯框架裏面,可以直接使用元素定位去操作;;

# 導包
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

# 實例化瀏覽器
driver = webdriver.Edge()
# 網址
my_url = 'https://www.leafground.com/alert.xhtml'
# 打開網頁
driver.get(my_url)
# 窗口最大化
driver.maximize_window()

# alert警告框處理
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt91"]/span[2]').click()
alert = driver.switch_to.alert
# 增加強制等待時間2秒查看效果
sleep(2)
# 點擊確定
alert.accept()

# Alert (Confirm Dialog),有確定和取消按鈕的彈框
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt93"]/span[2]').click()
alert = driver.switch_to.alert
sleep(2)
# alert.accept()
# 點擊取消
alert.dismiss()

# Sweet Alert (Simple Dialog),是一個自定義的彈框庫
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt95"]/span[2]').click()
# 若是在內聯框架裏面,需要先切入內聯框架
# driver.switch_to.frame(0)
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt98"]/span[2]').click()

# 等待3秒
sleep(3)
# 關閉實例化瀏覽器
driver.quit()

例 4、模態對話框

9、Sweet Modal Dialog,基於 JavaScript 實現的模態框;自行參考例 ;

從零開始到設計Python+Selenium自動化測試框架_實例化_05

10、優化 alert_handle.py 文件;

# 導包
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

# 實例化瀏覽器
driver = webdriver.Edge()
# 網址
my_url = 'https://www.leafground.com/alert.xhtml'
# 打開網頁
driver.get(my_url)
# 窗口最大化
driver.maximize_window()

# alert警告框處理
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt91"]/span[2]').click()
alert = driver.switch_to.alert
# 增加強制等待時間2秒查看效果
sleep(2)
# 點擊確定
alert.accept()

# Alert (Confirm Dialog),有確定和取消按鈕的彈框
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt93"]/span[2]').click()
alert = driver.switch_to.alert
sleep(2)
# alert.accept()
# 點擊取消
alert.dismiss()

# Sweet Alert (Simple Dialog),是一個自定義的彈框庫
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt95"]/span[2]').click()
# 若是在內聯框架裏面,需要先切入內聯框架
# driver.switch_to.frame(0)
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt98"]/span[2]').click()

# Sweet Modal Dialog,是一個自定義的彈框庫
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt100"]/span[2]').click()
sleep(2)
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt101"]/div[1]/a/span').click()

# 等待3秒
sleep(3)
# 關閉實例化瀏覽器
driver.quit()

11、 在項目根目錄下新建一個名稱為 alert_handle01.py 的 Python 文件;

例 5、提示對話框

Prompt 提示對話框的最簡單用法需要您希望顯示的消息文本和用於處理用户輸入的回調;若用户取消或關閉對話框,則輸入的值將為null;否則,將傳遞文本輸入的值。

12、Alert (Prompt Dialog),自行參考;

從零開始到設計Python+Selenium自動化測試框架_#測試工具_06

13、優化 alert_handle01.py 文件;

# 導包
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

# 實例化瀏覽器
driver = webdriver.Edge()
# 網址
my_url = 'https://www.leafground.com/alert.xhtml'
# 打開網頁
driver.get(my_url)
# 窗口最大化
driver.maximize_window()

# Alert (Prompt Dialog)
driver.find_element(By.XPATH, '//*[@id="j_idt88:j_idt104"]/span[2]').click()
alert = driver.switch_to.alert
alert.send_keys('這是一個Alert (Prompt Dialog)測試')
# 點擊確定
alert.accept()
# 點擊關閉
# alert.dismiss()

# 等待3秒
sleep(3)
# 關閉實例化瀏覽器
driver.quit()

14、運行查看結果;

從零開始到設計Python+Selenium自動化測試框架_根目錄_07

例 6、警告對話框

15、Sweet Alert (Confirmation)是一種替代原生 JavaScript alertconfirm 功能的插件,支持自定義樣式和交互邏輯,常用於彈出提示框、確認操作等場景。自行參考;

從零開始到設計Python+Selenium自動化測試框架_#python_08

例 7、屬性對話框

16、Minimize and Maximize(最大化和最小化),自行參考;

從零開始到設計Python+Selenium自動化測試框架_#測試工具_09

17、其他請自行學習瞭解;

框架設計

百度百科

隨着軟件開發的快速發展,自動化測試在保證軟件質量和提高開發效率方面扮演着越來越重要的角色;而一個高效且穩定的自動化測試框架是自動化測試成功的關鍵;

設計框架的原則

封裝基類方法:對於一些通用的方法可以進行封裝後再調用;

高內聚低耦合:每個模塊儘可能獨立完成自己的功能,儘量不過多的依賴於模塊外部的代碼;模塊與模塊之間接口的複雜程度儘量低,在類內部儘可能減少方法之間的調用,否則一個方法的變動會影響調用它的另一個方法;

代碼腳本分離:業務代碼、測試數據相互剝離、靈活調用;

從零開始到設計Python+Selenium自動化測試框架_#python_10

框架的目錄結構搭建

新建項目,項目名稱自定義(自行設置)

第一個目錄、config 配置文件

在項目根目錄下新建名稱為 config(configs) 的 Python 軟件包,用來存放測試執行過程中所需要的相關配置文件,具有可擴展性;

在 config 軟件包下新建一個名稱為 setting.py 的Python文件,用來存放框架中需要用到的基本路徑的配置,像是 log 日誌級別的設置均可以到這裏面;

第二個、公共模塊

有叫 common(公共) 的,也有用 core(最核心的) 名稱的,這裏用 util_tools(工具),按個人喜好自行選擇;一般用來存放一些通用的功能函數,存放一些項目通用的接口等;

在項目根目錄下新建名稱為 util_tools 的 Python 軟件包,用來存放一些公共模塊;例如:log 日誌、讀取配置文件的封裝、做數據驅動的封裝等等;

第三個、數據

在項目根目錄下新建名稱為 data(datas) 的目錄,一般用來存放測試執行時的所需的相關測試文件、測試數據,例如:測試用例、測試集等;

第四個、報告

在項目根目錄下新建名稱為 report(reports) 的 Python 軟件包,一般用來存放輸出的測試報告;

第五個、日誌

在項目根目錄下新建名稱為 log(logs) 的目錄,一般用來存放測試執行時生成的日誌文件,以便測試過程的追溯,方便排查測試問題等;

第六個、測試圖片

在項目根目錄下新建名稱為 screenshot 的目錄文件,用於存放截圖圖片;

第七個、測試用例

在項目根目錄下新建名稱為 testcase 的 Python 軟件包,用來存放測試用例;可以在此軟件包下新建多個目錄去管理對應的模塊;

第八個、頁面類

在項目根目錄下新建名稱為 pageObject 的 Python 軟件包,用來管理被測頁面的頁面類的元素和方法,一般是用來存放頁面操作類的函數(頁面元素和頁面操作),和 testcase 的測試用例相互對應,例如:網站首頁、登錄頁面、註冊頁面等等;

第九個、主函數 run.py 文件

一般主函數 run.py 文件都是在自動化測試項目文件根目錄下,是用來執行測試用例的主入口;

第十個、項目依賴 requirements.txt 文件

一般可在項目根目錄下(自定義文件路徑),可選項,不過建議在自動化測試初步完成階段生成一個此類文件,方便以後可移植性;

第十一個、項目説明 README.md 文件

一般可在項目根目錄下(自定義文件路徑),可選項;在軟件開發中,readme.md(README.md)文件是一個項目的重要組成部分,自行選擇;

第十二個、其他

自行按需添加其他文件;

所謂會了不難,難了不會;無論什麼樣的框架均是在實際工作中逐步完善的;

未完待續。。。