淺談 PageObject模式

做過UI自動化的都曉得,在做UI自動化時定位特別依賴頁面,一旦頁面發生變更就不得不跟着去修改頁面定位。
在webdriver中,假設你想對一個元素定位操作,那麼你可能會編寫下面的代碼:
driver.findElement(By.id("ad")).click();
發現問題:
你有10個地方對這個元素做了這個操作,哪天這個控件的元素變了,你就不得不去修改10個地方。
那麼,有什麼好的方法來解決這個問題呢?
這就是PageObject模式的引入的必要性。
那到底什麼是PageObject模式?
PageObject 見名思意思,就是頁面對象,也就是把界面定位和業務操作分開,在我現在團隊我推行的是三層模式,把UI自動化分爲了對象庫層,操作層和業務層。PO思想對界面交互細節進行了封裝,這樣可以使測試案例更關注業務,而非界面細節,提高了測試案例的可讀性,同樣也可以爲我後期BDD(Behavior Driven Deveopment)的推行打好基礎。

廢話這麼多來看個例子吧:
假設我現在要做一個登陸操作,那麼我創建一個對象庫層:

public class LoginPage{
    public static By userName = By.name("userName");
    public static By pwd = By.name("passWord");
    public static By login=By.id("login");
}

 操作層:
public void inputUser(String name, String pwd) {
    driver.findElement(LoginPage.userName).sendKeys(name);
    driver.findElement(LoginPage.pwd ).sendKeys(pwd);

}

業務層:
@Test
public void login(){
    login.inputUser("username","pwd");
    tools.click("點擊【登錄】",login);
}

很容易從上面的案例可以看出,PO模式引入前後的區別:


當然減少UI自動化腳本的維護,提高測試案例的可讀性方式很多的,PO不是唯一的,也不是什麼真理,根據自己環境拿出一套合適的方案纔是目標。

發佈了64 篇原創文章 · 獲贊 12 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章