PageObject設(shè)計模式
測試人員為 UI 頁面寫測試用例時(如 Web 頁面和移動端頁面),測試用例中會存在大量元素和操作細(xì)節(jié)。當(dāng) UI 頁面的功能發(fā)生變化時,測試用例也要跟著變化,我們用 Pageobject 可以很好地解決這個問題。
使用 UI 自動化測試工具室(包括 Selenium、Appium 等),如果無統(tǒng)一模式對測試用例進(jìn)行規(guī)范,隨著測試用例的增多會變得難以維護(hù),通過使用 PageObject 可以讓自動化測試腳本變得井然有序?qū)㈨撁鎲为毦S護(hù)并封裝其內(nèi)容的細(xì)節(jié)。同時可以使用 testcase 更穩(wěn)健,不需要太多改動。
使用 PageObject
具體用法:要把測試的元素信息和操作細(xì)節(jié)封裝到 Page 類中,測試用例中調(diào)用 Page 對象(PageObject),例如,測試用例中存在一個“選取相冊標(biāo)題”的操作,這時在測試用例中需要為之建立函數(shù) selectAblumWithTitle(),函數(shù)內(nèi)部實現(xiàn)的細(xì)節(jié)為 findElementsWithClass('album')。
測試用例中實現(xiàn)“選取相冊標(biāo)題”操作的偽代碼如下。
PageObject 是主要原理是,提供一個簡單接口(或者函數(shù),如上述的 selectAblumWithTitle),此函數(shù)可讓調(diào)用者在 Web 頁面上做任何操作,例如,點擊頁面元素、在輸入框內(nèi)輸入內(nèi)容等。因此,如果要訪問 Web 頁面中一個文本字段,測試用例可以用 PageObject 獲取和返回字符串的方法,PageObject 封裝了對數(shù)據(jù)的操作細(xì)節(jié),如查找類型和點擊元素等。當(dāng) Web 頁面元素改動時,測試人員只改變測試用例中 page 類中的內(nèi)容,不需要改變調(diào)用它的測試用例的其他地方。
不要為每個 UI 頁面都創(chuàng)建一個 page 類,應(yīng)該只為頁面中重要的元素創(chuàng)建 page 類。例如,一個頁面顯示多個相冊,應(yīng)該創(chuàng)建一個相冊列表 PageObject。如果某些復(fù)雜 UI 的層次結(jié)構(gòu)知識用來組織 UI,那么這些層次結(jié)構(gòu)就不應(yīng)該出現(xiàn)在 PageObject 中。使用 PageObject 的目的是通知給頁面建模,使測試用例的執(zhí)行步驟變得更加清晰。
測試 Web 頁面時往往需要從一個頁面跳轉(zhuǎn)到另一個頁面,頁面跳轉(zhuǎn)的實現(xiàn)需要再測試用例中初始化 page 對象,并返回另一個 page 對象,這樣的效果就如點擊“注冊”按鈕后,進(jìn)入測試頁面。測試用例中使用的代碼中用的是 returnRegister()方法。
建議不要在 PageObject 中放斷言。PageObject 用于提供頁面的狀態(tài)信息及頁面方法,而不是用來驗證某個頁面功能的。