1. 程式人生 > >Selenium系列(二十) - PageObject模式的詳細介紹

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測試中,頁面若經常變動,程式碼的維護量隨之增多;因為三層分級,我們只需要修改頁面物件的程式碼,如元素物件或者操作物件的方法,不用修改測試用例的程式碼,也不影響測試用例的正常執行
  • 降低程式碼耦合性

&n