一個網頁的對象抽象之路——po編程 (干貨,Java自動化測試)


先來看一個在騰訊課堂首頁搜索機構的操作步驟:

1:首先打開騰訊課堂的首頁:https://ke.qq.com

2:點擊課程或機構的下拉選擇圖標

3:選擇機構

4:在搜索框輸入要搜索的機構名稱

5:點擊查找圖標查找機構,跳轉到查找結果頁面

6:檢查查找出的機構名稱

7:點擊機構logo跳轉詳情頁面

 

上述操作涉及到兩個頁面,騰訊課堂首頁和搜索結果頁,操作圖示如下:

1:騰訊課堂首頁

 

 

2:搜索結果頁面

 

 

 

使用webdirver的api完成模擬上述步驟代碼如下:

SearchCase.java

 

 

上述代碼簡單而清晰,但如果每個測試用例都這樣去寫的話,將會出現非常多的重復性代碼,可維護性較低,因此,在使用Selenium WebDirver進行自動化開發時,可以使用po(頁面對象)編程的思想,減少重復性代碼、提高代碼的可維護性。

 

一:po的概念與思想

po是page object的縮寫,即頁面對象。使用po是對頁面進行抽象或者說建模的過程,需要把頁面當作一個對象

面向對象編程語言中,進行面向對象編程需要考慮以下兩點:

1:對象的屬性(全局變量)

2:對象的行為(函數)

po思想也是一樣,對頁面進行抽象時,把頁面的一個一個的web元素設計為頁面對象的屬性,把頁面上的操作(如點擊、輸入等)設計為頁面對象的行為

 

二:po中元素的定位

Selenium提供了許多注解和Api可以方便的定位元素和初始化元素,如下是騰訊課堂首頁下拉選擇機構圖標的聲明方式:

 

三行代碼釋義:

1、@FindBy(css="i[class='icon-font i-v-bottom-small']")

指定了要元素的定位方式,如上表示以cssSelector方式進行定位,還有其他7種寫法@FindBy(id="xxx")、@FindBy(name="xxx")...

2、@CacheLookup 

表示緩存查找到元素,重復使用可提高查詢速度

3、public WebElement select_icon;

聲明一個web元素類型的全局變量

 

三:po中元素的初始化

Po提供了 PageFactory.initElements()來初始化頁面元素,把查找的元素賦值到我們定義的屬性(全局變量)上面

為了非常方便的進行頁面元素的初始化,我們把該方法放置到頁面類型的構造方法中,當調用該構造方法創建頁面對象時,會調用該方法同時初始化頁面的元素

代碼如下:

 

 

四:頁面行為抽象

元素初始化后,通過操作元素(如點擊,輸入)即可完成頁面的功能,po中對頁面功能的抽象,則提現為聲明一個一個的對象方法

如下是頁面選擇機構的行為的抽象:

 

下面是對“騰訊課堂首頁”頁面進行抽象的完整代碼:

KeqqHomePage.java

 

 

 

 

  

其中繼承的父類BasePage僅僅只包含一個靜態全局變量driver,方便其他頁面繼承直接使用

BasePage.java

 

 

其中BrowerSelector.getWebDriver()方法是封裝好的一個工具類,用來啟動瀏覽器,得到driver對象用的,在后面的源代碼網盤鏈接中可以下載到。

 

相同的方式對“結果頁面”進行抽象,代碼如下:

SearchResultPage.java

 

 

 

執行測試的類,代碼如下:

Tester.java

 

 

總結:

po編程,實質上就是分離頁面元素、封裝頁面元素操作的過程,將可能變化的頁面元素單獨映射到對象屬性、將頁面元素操作抽象成函數,讓我們以面向對象方式理解抽象一個頁面,實際上就是編程中解耦思想的應用,從而簡化測試用例的步驟,提高自動化測試代碼的可維護性。

 

附公開課視頻和源碼百度雲鏈接:

https://pan.baidu.com/s/1GoZyigdWiHIQY3xy9nE2ww 密碼:1fgl


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM