Selenium系列(二十) - PageObject模式的詳細介紹
阿新 • • 發佈:2020-04-05
如果你還想從頭學起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模式後,操作的步驟如下:
- 會先建立一個class,該class就是登入頁面物件類
- 類的屬性:使用者名稱輸入框,密碼輸入框,登入按鈕的webElenent
- 類的方法:各種元素操作的方法
- 方法裡面會呼叫物件庫層的二次封裝Selenium的方法
- 測試層從頁面操作層呼叫操作方法,寫成測試用例,這種模式可以做到定位元素與測試用例分離
- 所以這樣的設計理念就是PO模式
PO模式的分層
PO模式可以把一個頁面一般分為三層
物件庫層:二次封裝Selenium的方法
頁面操作層(也稱:邏輯層):封裝頁面的元素物件和元素操作
測試層(也稱:業務層):多個頁面操作完成一個業務測試,一般結合單元測試框架(unittest、pytest)來測試
當然也有分四層的
物件庫層:二次封裝Selenium的方法
頁面層:封裝頁面的元素物件
操作層:封裝頁面的元素操作
測試層:多個頁面操作完成一個業務測試
PO模式和關鍵字驅動+資料驅動有什麼區別?(PO模式的原理)
- 升級到PO模式之後,首先將Selenium常用的功能,結合實際業務需要進行二次封裝;封裝的內容是完全貼合實際業務來實現的【封裝Selenium】
- 將元素物件和元素操作進行整合【元素物件整合】
- 將物件庫和測試程式碼分離,實現資料與程式碼分離【資料與程式碼分離】
PO模式給程式碼帶來的優勢
- 程式碼冗餘明顯降低:二次封裝Selenium方法和提取公共方法,提高程式碼複用性
- 程式碼的閱讀性明顯提升:因為三層分級,將不同內容進行不同的封裝,整體程式碼閱讀性提升
- 程式碼維護性明顯提升:UI測試中,頁面若經常變動,程式碼的維護量隨之增多;因為三層分級,我們只需要修改頁面物件的程式碼,如元素物件或者操作物件的方法,不用修改測試用例的程式碼,也不影響測試用例的正常執行
- 降低程式碼耦合性
&n