有了注解方式叉趣,確實大大提升了我們的編寫效率昼浦,同時降低了維護成本搬设。不過WebDriver向來是個送佛送到西的活雷鋒,有了注解膀捷,還為我們提供了一套與Page Object設(shè)計模式相結(jié)合的使用方式迈嘹,讓我們的代碼編寫更加清晰,同時具有更低的維護成本全庸。對于什么是Page Object設(shè)計模式我們就不在費唇舌了秀仲,網(wǎng)上解說太多了,那么就來說說這兩者怎么結(jié)合吧壶笼。
總體結(jié)構(gòu)上如上圖所示神僵,將整個Case劃分成頁面元素對象,頁面對象覆劈,及用例對象保礼。接下來我們至底而上來層層分析责语。
PageObject對象
主要對頁面上的元素進行聲明和定位炮障,方便后續(xù)在頁面上使用鹦筹。在這里我們就可以把注解用得如魚得水了铝阐。具體示例如下:
我們?yōu)橐粋€頁面铐拐,建立一個頁面元素的對象,在整個頁面元素對象中练对,我們對這個頁面的所有元素用注解進行聲明。再使用注解的同時螟凭,我們可以發(fā)現(xiàn)整個對象基本上實現(xiàn)了UIMAP的作用,即將一個頁面的元素維護在一個統(tǒng)一的文件了螺男,方便后續(xù)因為重構(gòu)和功能迭代進行調(diào)整元素定位棒厘。
Page對象
Page對象主要是對該頁面上元素的操作的封裝,將特定的邏輯操作封裝在一起奢人,以組成特定的業(yè)務(wù)單元谓媒。如下圖所示:
在Page對象中,基本上都是和業(yè)務(wù)相關(guān)的基本操作何乎,比如做一個點擊句惯,做一次輸入,進行一次檢查等(如圖中checkCover支救,checkBrandLogo抢野,checkBrandName等),同時也會有對整個業(yè)務(wù)的封裝各墨,比如對這個頁面靜態(tài)數(shù)據(jù)的檢查(如圖中apiCheck)指孤。在這里,我們發(fā)現(xiàn)在頁面中操作頁面元素是相當(dāng)簡單的贬堵,直接取對象的屬性即可邓厕。
PageObject<==>Page
看到這里我們可以知道結(jié)構(gòu)相對清晰,那么我們?nèi)绾卧赑ageObject和Page之間建立關(guān)系呢扁瓢?WebDriver同樣為我們提供了便利详恼。如下圖,我們可以通過PageFactory類輕松的在Page類中實例化PageObject中的所有元素引几。
在Page對象的構(gòu)造函數(shù)中昧互,通過PageFactory對PageObject進行初始化。這樣看起來是否就很簡潔清晰了呢伟桅?完成初始化后敞掘,就直接調(diào)用對象屬性的方式來使用所有的頁面元素。
總結(jié)
通過使用注解楣铁,將原先的頁面對象拆分成為PageObject對象和Page對象玖雁,不僅簡化了元素定位操作,同時做到元素定位和頁面業(yè)務(wù)的完全分離盖腕,結(jié)構(gòu)清晰赫冬,維護簡單。