Selenium系列(二十) – PageObject模式的詳細介紹

如果你還想從頭學起Selenium,可以看看這個系列的文章哦!

https://www.cnblogs.com/poloyy/category/1680176.html

 

其次,如果你不懂前端基礎知識,需要自己去補充哦,部落客暫時沒有總結(雖然我也會,所以我學selenium就不用複習前端了哈哈哈…)

 

前言

  • 在UI自動化測試中,PO是目前最為主流,也是公認最佳的設計模式
  • UI自動化測試最初是通過關鍵字驅動+數據驅動的形式來實現,然後升級到PO模式

 

什麼是關鍵字驅動

  • 簡單而言,就是將Selenium常用功能進行二次封裝
  • 譬如:把查找元素、點擊、輸入等原生方法進行封裝
  • 而最大的問題點在於:不管封裝之後的關鍵字方法是否用得上,都會將Selenium的原生方法封裝,但業務測試中是永遠用不上的

 

關鍵字驅動 vs RF

  • 可以把關鍵字驅動對比用RF(Robot Framework)做的自動化測試,在RF GUI介面調用關鍵字,並傳入參數即可完成一系列的元素操作;
  • 而我們在Pycharm上完成關鍵字驅動也是相同道理,封裝好Selenium常用方法,然後去調用關鍵字,不同頁面傳入不同的參數即可完成一系列的元素操作

 

什麼是數據驅動

將程式碼和數據進行分離,單純由數據組成文件,再由文件來驅動關鍵字,最終實現整個自動化的流程

 

什麼是關鍵字驅動+數據驅動

  • 讀取數據,將固定格式的數據進行拼接【讀取數據】
  • 拼接後的內容作為關鍵字所需要的參數,進行傳入【傳入數據】
  • 調用關鍵字,將執行結果和預期結果進行對比,從而獲取單條測試用例執行是否通過的結果【執行關鍵字,斷言結果】

 

關鍵字驅動+數據驅動是一種設計模式哦! 

 

什麼是PO模式

  • PO模式是page object model的縮寫,是一種設計模式
  • 把待測頁面當成一個頁面對象,一般包含了元素對象的定位和元素操作方法,將頁面對象和真實的網站頁面一 一映射起來
  • 比如一個登錄頁面,使用PO模式後,操作的步驟如下:
    1. 會先創建一個class,該class就是登錄頁面對象類
    2. 類的屬性:用戶名輸入框,密碼輸入框,登錄按鈕的webElenent
    3. 類的方法:各種元素操作的方法
    4. 方法裡面會調用對象庫層的二次封裝Selenium的方法
    5. 測試層從頁面操作層調用操作方法,寫成測試用例,這種模式可以做到定位元素與測試用例分離
  • 所以這樣的設計理念就是PO模式

 

PO模式的分層

PO模式可以把一個頁面一般分為三層

對象庫層:二次封裝Selenium的方法

頁面操作層(也稱:邏輯層):封裝頁面的元素對象和元素操作

測試層(也稱:業務層):多個頁面操作完成一個業務測試,一般結合單元測試框架(unittest、pytest)來測試

當然也有分四層的

對象庫層:二次封裝Selenium的方法

頁面層:封裝頁面的元素對象

操作層:封裝頁面的元素操作

測試層:多個頁面操作完成一個業務測試

 

PO模式和關鍵字驅動+數據驅動有什麼區別?(PO模式的原理)

  • 升級到PO模式之後,首先將Selenium常用的功能,結合實際業務需要進行二次封裝;封裝的內容是完全貼合實際業務來實現的【封裝Selenium】
  • 將元素對象和元素操作進行整合【元素對象整合】
  • 將對象庫和測試程式碼分離,實現數據與程式碼分離【數據與程式碼分離】

 

PO模式給程式碼帶來的優勢

  • 程式碼冗餘明顯降低:二次封裝Selenium方法和提取公共方法,提高程式碼復用性
  • 程式碼的閱讀性明顯提升:因為三層分級,將不同內容進行不同的封裝,整體程式碼閱讀性提升
  • 程式碼維護性明顯提升:UI測試中,頁面若經常變動,程式碼的維護量隨之增多;因為三層分級,我們只需要修改頁面對象的程式碼,如元素對象或者操作對象的方法,不用修改測試用例的程式碼,也不影響測試用例的正常執行
  • 降低程式碼耦合性