天天看點

Selenium基于POM的自動化測試實踐

什麼是Page Object模式

Page Object 見名知意,就是頁面對象,并将頁面元素定位方法和元素操作進行分離。在實際自動化測試實戰過程中,我們一般對腳本的實作分為三層:

(1)對象層: 用于存放頁面元素定位和控件操作

(2)邏輯層: 則是一些封裝好的功能用例子產品

(3)業務層: 則是我們真正的測試用例的操作部分

PageObject 的優點

  • 減少代碼備援
  • 業務和實作分離
  • 降低代碼維護成本

PageObject 的六大原則

  1. The public methods represent the services that the page offers/公共方法表示頁面提供的服務
  2. Try not to expose the internals of the page/盡量不要暴露頁面的内部
  3. Generally don’t make assertions/Page設計中不要出現斷言,應該寫在測試用例類中
  4. Methods return other PageObjects/方法傳回其他PageObject
  5. Need not represent an entire page/不需要表示整個頁面
  6. Different results for the same action are modeled as different methods/相同操作的不同結果被模組化為不同的方法

示例(登入百度一下)

一、建構PO模型

項目的整個PO結構如下

Selenium基于POM的自動化測試實踐

二、基礎層

首先是base目錄下的

basepage.py

Selenium基于POM的自動化測試實踐
Selenium基于POM的自動化測試實踐

這裡作為基類,封裝定位、點選、輸入等基本操作以及可以增加異常時截圖的方法

三、對象層、邏輯層

page目錄下的

login_page.py

Selenium基于POM的自動化測試實踐

封裝這個頁面基本所有可能的操作,注意方法的最後最好可以傳回接下來要跳轉的頁面對象(如登入後就會跳轉到首頁)

page_element目錄下是單獨為每個頁面的元素做維護而建立的子產品檔案

Selenium基于POM的自動化測試實踐

還有common目錄下

Selenium基于POM的自動化測試實踐

constant.py

内定義一下常量,

logger.py

為日志列印

testcase目錄

Selenium基于POM的自動化測試實踐
Selenium基于POM的自動化測試實踐

編寫真正的測試用例,可以再次進行斷言、添加測試報告等。

四、運作結果

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等。或許後續有時間可以繼續做補充優化分享給大家。
以上就是本期文章的所有内容,感謝觀看,如果對您有幫助請點贊關注+收藏,一鍵三連,多謝支援!