自动化测试之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();
    }*/
}

猜你喜欢

转载自www.cnblogs.com/davieyang/p/10071133.html