天天看點

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模式引入前後的差別:

PageObject模式的層次結構