技術分享 | web自動化測試-PageObject 設計模式
為 UI 頁面寫測試用例時(比如 web 頁面,移動端頁面),測試用例會存在大量元素和操作細節。當 UI 變化時,測試用例也要跟著變化, PageObject 很好的解決了這個問題。
使用 UI 自動化測試工具時(包括 selenium,appium 等),如果無統一模式進行規範,隨著用例的增多會變得難以維護,而 PageObject 讓自動化指令碼井然有序,將 page 單獨維護並封裝細節,可以使 testcase 更穩健,不需要太多改動。
使用
具體做法:把元素資訊和操作細節封裝到 Page 類中,在測試用例上呼叫 Page 物件(PageObject),比如存在一個功能“選取相簿標題”,需要為之建立函式selectAblumWithTitle(),函式內部是操作細節findElementsWithClass('album')等:
以選“取相簿標題”舉例,虛擬碼如下:
selectAblumWithTitle() {
#選取相簿
findElementsWithClass('album')
#選取相簿標題
findElementsWithClass('title-field')
#返回標題內容
return getText()
}
PageObject 的主要原則是提供一個簡單介面 (或者函式,比如上述的selectAblumWithTitle),讓呼叫者在頁面上可以做任何操作,點選頁面元素,在輸入框輸入內容等。因此,如果要訪問一個文字欄位,PageObject 應該有獲取和返回字串的方法。PageObject 應該封裝對資料的操作細節,比如查詢元素和點選元素。當頁面元素改動時,應該只改變 page 類中的內容,不需要改變呼叫它的地方。
不要為每個 UI 頁面都建立一個 page 類,應該只為頁面中重要的元素建立 page 類。比如,一個頁面顯示多個相簿,應該建立一個相簿列表 PageObject,它包含許多相簿 PageObject。如果某些複雜 UI 的層次結構只是用來組織 UI,那麼它就不應該出現在 PageObject 中。PageObject 的目的是通過給頁面建模,從而對應用程式的使用者變得有意義:
跳轉到另一個頁面,初始 page 物件應當 return 另一個 page 物件,比如點選註冊,進入註冊頁面,在程式碼中就應該 return Register()。如果想獲取頁面資訊,可以 return 基本型別(字串、日期)。
建議不要在 PageObject 中放斷言。應該去測 PageObject,而不是讓 PageObject 自己測自己,PageObject 的責任是提供頁面的狀態資訊。這裡僅用 HTML 描述 PageObject,這種模式還可以用來隱藏 Java swing UI 細節,它可用於所有 UI 框架。
你好呀,喜歡這篇文章的話煩請點個“贊”哦!萬分感謝~(▽) PS:有問題可以聯絡我們哦~v ceshiren001