什麼是Page Object模式
Page Object 見名知意,就是頁面對象,并将頁面元素定位方法和元素操作進行分離。在實際自動化測試實戰過程中,我們一般對腳本的實作分為三層:
(1)對象層: 用于存放頁面元素定位和控件操作
(2)邏輯層: 則是一些封裝好的功能用例子產品
(3)業務層: 則是我們真正的測試用例的操作部分
PageObject 的優點
- 減少代碼備援
- 業務和實作分離
- 降低代碼維護成本
PageObject 的六大原則
- The public methods represent the services that the page offers/公共方法表示頁面提供的服務
- Try not to expose the internals of the page/盡量不要暴露頁面的内部
- Generally don’t make assertions/Page設計中不要出現斷言,應該寫在測試用例類中
- Methods return other PageObjects/方法傳回其他PageObject
- Need not represent an entire page/不需要表示整個頁面
- Different results for the same action are modeled as different methods/相同操作的不同結果被模組化為不同的方法
示例(登入百度一下)
一、建構PO模型
項目的整個PO結構如下
二、基礎層
首先是base目錄下的
basepage.py
這裡作為基類,封裝定位、點選、輸入等基本操作以及可以增加異常時截圖的方法
三、對象層、邏輯層
page目錄下的
login_page.py
封裝這個頁面基本所有可能的操作,注意方法的最後最好可以傳回接下來要跳轉的頁面對象(如登入後就會跳轉到首頁)
page_element目錄下是單獨為每個頁面的元素做維護而建立的子產品檔案
還有common目錄下
constant.py
内定義一下常量,
logger.py
為日志列印
testcase目錄
編寫真正的測試用例,可以再次進行斷言、添加測試報告等。
四、運作結果
DevTools listening on ws://127.0.0.1:50996/devtools/browser/8d43e43e-ca09-4513-b9bd-0517cf980a0e
INFO 2023-03-01 10:32:23,623 [test_login.py_16] ------用例前置工作:打開浏覽器------
INFO 2023-03-01 10:32:25,086 [basepage.py_36] 查找百度首頁-登入按鈕 - 元素('id', 's-top-loginbtn')成功!
INFO 2023-03-01 10:32:25,123 [basepage.py_44] 點選:百度首頁-登入按鈕 - 元素('id', 's-top-loginbtn')成功
INFO 2023-03-01 10:32:28,032 [basepage.py_36] 查找輸入登入賬号 - 元素('id', 'TANGRAM__PSP_11__userName')成功!
INFO 2023-03-01 10:32:28,129 [basepage.py_54] 輸入:在輸入登入賬号 - 元素('id', 'TANGRAM__PSP_11__userName')輸入文本值(xxx)成功
INFO 2023-03-01 10:32:28,157 [basepage.py_36] 查找輸入登入密碼 - 元素('id', 'TANGRAM__PSP_11__password')成功!
INFO 2023-03-01 10:32:28,282 [basepage.py_54] 輸入:在輸入登入密碼 - 元素('id', 'TANGRAM__PSP_11__password')輸入文本值(xxx)成功
INFO 2023-03-01 10:32:28,332 [basepage.py_36] 查找點選登入按鈕 - 元素('id', 'TANGRAM__PSP_11__submit')成功!
INFO 2023-03-01 10:32:28,603 [basepage.py_44] 點選:點選登入按鈕 - 元素('id', 'TANGRAM__PSP_11__submit')成功
ERROR 2023-03-01 10:32:48,863 [basepage.py_66] 查找登入成功與否 - 元素('class name', 'user-name')失敗!
DevTools listening on ws://127.0.0.1:51175/devtools/browser/213f651a-8cb3-4d27-9f03-db5466c6614e
INFO 2023-03-01 10:32:54,779 [test_login.py_16] ------用例前置工作:打開浏覽器------
INFO 2023-03-01 10:32:56,132 [basepage.py_36] 查找百度首頁-登入按鈕 - 元素('id', 's-top-loginbtn')成功!
INFO 2023-03-01 10:32:56,172 [basepage.py_44] 點選:百度首頁-登入按鈕 - 元素('id', 's-top-loginbtn')成功
INFO 2023-03-01 10:32:58,292 [basepage.py_36] 查找輸入登入賬号 - 元素('id', 'TANGRAM__PSP_11__userName')成功!
INFO 2023-03-01 10:32:58,374 [basepage.py_54] 輸入:在輸入登入賬号 - 元素('id', 'TANGRAM__PSP_11__userName')輸入文本值(xxx)成功
INFO 2023-03-01 10:32:58,406 [basepage.py_36] 查找輸入登入密碼 - 元素('id', 'TANGRAM__PSP_11__password')成功!
INFO 2023-03-01 10:32:58,512 [basepage.py_54] 輸入:在輸入登入密碼 - 元素('id', 'TANGRAM__PSP_11__password')輸入文本值(xxx)成功
INFO 2023-03-01 10:32:58,539 [basepage.py_36] 查找點選登入按鈕 - 元素('id', 'TANGRAM__PSP_11__submit')成功!
INFO 2023-03-01 10:32:58,600 [basepage.py_44] 點選:點選登入按鈕 - 元素('id', 'TANGRAM__PSP_11__submit')成功
INFO 2023-03-01 10:33:09,474 [basepage.py_36] 查找登入成功與否 - 元素('class name', 'user-name')成功!
INFO 2023-03-01 10:33:09,523 [basepage.py_68] 查找登入成功與否 - 元素('class name', 'user-name')成功!
INFO 2023-03-01 10:33:09,524 [test_login.py_24] ------用例後置工作:關閉浏覽器------
F
----------------------------------------------------------------------
Ran 2 tests in 50.878s
FAILED (failures=1)
以上就是Web端Selenium基于OPM模型自動化測試架構的大體模式,實際上還有很多可以優化的地方,比如增加測試報告、測試結果自動發送郵件、實作CI/CD等。或許後續有時間可以繼續做補充優化分享給大家。
以上就是本期文章的所有内容,感謝觀看,如果對您有幫助請點贊關注+收藏,一鍵三連,多謝支援!