1. 程式人生 > >selenium測試框架篇,頁面對象和元素對象的管理

selenium測試框架篇,頁面對象和元素對象的管理

ref end dem target .cn factor imp wait 統一管理

前期已經做好使用Jenkins做buildhttp://www.cnblogs.com/tobecrazy/p/4529399.html

做自動化框架,不可避免的就是對象庫。

有一個好的對象庫,可以讓整個測試體系:

  • 更容易維護
  • 大大增加代碼重用
  • 增加測試系統的穩定性

這裏先了解一下我所說的對象庫:

技術分享

所謂的頁面對象,是指每一個真是的頁面是一個對象。

比如zhihu的登陸頁面是一個頁面對象,http://www.zhihu.com/#signin

這個頁面對象主要包含一個輸入郵箱的輸入框(一個元素對象),一個輸入密碼的密碼框

一個登陸框。當然,zhihu不止一個頁面,有無數頁面,每一個頁面都可以封裝為一個對象。而每個

頁面的元素,也可以封裝成一個個元素對象。

技術分享

為什麽要封裝成一個個對象?

還是以這個登陸頁面為例,如果有一天zhihu改版,登陸界面UI變了,(但是需要輸入用戶名和密碼還有登陸按鈕不會消失吧)。

登陸頁面的元素的位置也相應改變,如果你的測試用例沒有封裝過頁面和元素, 每個頁面都是拿webdriver 直接寫,頁面元素定位

也分布到測試用例中,這要維護起來要全部改掉測試用例。如果你封裝了頁面,封裝了元素,再封裝一個對應的登陸Action,你的每個

測試用例是調用的login.action()。  這樣,你只需要改變你對象庫的內容就完美解決UI變化,而不必一個個修改測試用例。

測試框架目錄如下:

技術分享

接下來一這個登陸為例:

首先封裝一個BasePage的類,畢竟所有的頁面都有共同的東西,每個頁面都有元素,每個頁面元素都有相應的方法

這裏簡單封裝了幾個方法,如type

技術分享

技術分享 View Code

接下來封裝元素,Webdriver的元素,每個元素都有相應的定位地址(xpath路徑或css或id)等待時間和定位類型,默認為By.xpath

技術分享 View Code

接下來就是登陸頁面的類,這個登陸頁面的元素,放在excel統一管理,要獲取元素的信息,首先從excel讀取。

讀取excel的頁面元素是使用POI開源框架

技術分享 View Code

頁面類

技術分享
package com.dbyl.libarary.pageAction;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;

import com.dbyl.libarary.utils.BasePage;
import com.dbyl.libarary.utils.Locator;

public class LoginPage extends BasePage {

    WebDriver driver;

    public WebDriver getDriver() {
        return driver;
    }

    public LoginPage(WebDriver driver) throws IOException {
        super(driver);
        driver.get("http://www.zhihu.com/#signin");
    }

    Locator loginEmailInputBox = new Locator("loginEmailInputBox");

    Locator loginPasswordInputBox = new Locator("loginPasswordInputBox");
    Locator loginButton = new Locator("loginButton");
    Locator profile = new Locator(
            "profile");

    public void typeEmailInputBox(String email) throws Exception {
        type(loginEmailInputBox, email);
    }

    public void typePasswordInputBox(String password) throws Exception {
        type(loginPasswordInputBox, password);
    }

    public void clickOnLoginButton() throws Exception {
        click(loginButton);
    }

    public boolean isPrestentProfile() throws IOException {
        return isElementPresent(profile, 20);

    }

    public void waitForPageLoad() {
        super.getDriver().manage().timeouts()
                .pageLoadTimeout(30, TimeUnit.SECONDS);
    }

    
}
技術分享

接下來就是登陸的Action

技術分享
package com.dbyl.libarary.action;

import org.openqa.selenium.WebDriver;
import org.testng.Assert;

import com.dbyl.libarary.pageAction.HomePage;
import com.dbyl.libarary.pageAction.LoginPage;

public class CommonLogin {

    private static WebDriver driver;

    public static WebDriver getDriver() {
        return driver;
    }

    static LoginPage loginPage;

    public static HomePage login(String email, String password)
            throws Exception {
        loginPage = new LoginPage(getDriver());
        loginPage.waitForPageLoad();
        loginPage.typeEmailInputBox(email);
        loginPage.typePasswordInputBox(password);
        loginPage.clickOnLoginButton();
        Assert.assertTrue(loginPage.isPrestentProfile(), "login failed");
        return new HomePage(getDriver());
    }

    public static HomePage login() throws Exception {
        return CommonLogin.login("[email protected]", "cookies123");
    }

    public static void setDriver(WebDriver driver) {
        CommonLogin.driver = driver;
    }

}
技術分享

至此為止,已經封裝完畢

接下來就能在測試用例直接調用者

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 package com.dbyl.tests; import org.openqa.selenium.WebDriver; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import com.dbyl.libarary.action.ViewHomePage; import com.dbyl.libarary.utils.DriverFactory; import com.dbyl.libarary.utils.UITest; public class loginTest extends UITest{ WebDriver driver=DriverFactory.getChromeDriver(); @BeforeMethod(alwaysRun=true) public void init() { super.init(driver); ViewHomePage.setDriver(driver); //CommonLogin.setDriver(driver); } @Test(groups="loginTest") public void loginByUerName() throws Exception { //CommonLogin.login("[email protected]","cookies123"); ViewHomePage.viewMyProfile(); } @AfterMethod(alwaysRun=true) public void stop() { super.stop(); } }

  

demo的下載地址:https://github.com/tobecrazy/Demo

selenium測試框架篇,頁面對象和元素對象的管理