1. 程式人生 > >自動化測試之Page Object Model

自動化測試之Page Object Model

PO是什麼:

1、頁面物件模型(PO)是一種設計模式,用來管理維護一組web元素的物件庫

2、在PO下,應用程式的每一個頁面都有一個對應的page class

3、每一個page class維護著該web頁的元素集和操作這些元素的方法

其最終目的還是將頁面物件(方法和元素)與測試程式碼分離,提高測試程式碼的可維護性、可擴充套件性及可複用性

該模式下要求對常量、變數、類、方法的命名有基本的規約,一目瞭然

 ====================================================================================================================================

如下為簡單的程式碼,用於展示該模式

package PageObjects;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.testng.Assert;


public class LoginPage { //使用FindBy註解,定位到要操作的頁面元素, 此處用的xpath,也可以用其他的型別 @FindBy(xpath = "//*[@name='email']") public WebElement userName; @FindBy(xpath = "//*[@name='password']") public WebElement passWord; @FindBy(xpath = "//*[@id ='dologin']") public WebElement loginButton;
public String url = "http://mail.126.com"; public String title= "網易免費郵箱"; public WebDriver driver; //建構函式,生成瀏覽器物件,初始化PageFactory物件 public LoginPage(){ driver = new ChromeDriver(); PageFactory.initElements(driver, this); } public void load(){ this.driver.get(url); } public void quit(){ driver.quit(); } public void login(){ driver.switchTo().frame(driver.findElement(By.xpath("//*[@id='x-URS-iframe']"))); userName.sendKeys("[email protected]"); passWord.sendKeys("alex005x"); loginButton.click(); } public WebDriver getDriver(){ return driver; } public void isLoaded()throws Error{ Assert.assertTrue(driver.getTitle().contains(title)); } }
package TestScripts;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.openqa.selenium.WebDriver;
import PageObjects.LoginPage;
public class Test126mail {
    private WebDriver driver;
    /*private String baseUrl="http://mail.126.com";
    @BeforeMethod
    public void beforeMethod(){
        driver = new ChromeDriver();
    }*/
    @Test
    public void testLogin() throws InterruptedException {
        LoginPage loginpage = new LoginPage();
        loginpage.load();
        Thread.sleep(1000);
        loginpage.login();
        Thread.sleep(3000);
        /*
        loginpage.userName.sendKeys("davieyang99");
        loginpage.passWord.sendKeys("alex005x");
        loginpage.loginButton.click();
        */
        Assert.assertTrue(loginpage.getDriver().getPageSource().contains("郵件"));
        loginpage.quit();
    }
    /*@AfterMethod
    public void afterMethod(){
        driver.quit();
    }*/
}