PageObject在UI自动化测试中的应用--Junit版

pageObject以产品页面为单元,对每个页面page的元素进行封装,再进一步对每个页面的元素进行参数化,完成这些封装后,在执行测试用例时,用例中的业务场景包含的元素分布在各个页面,通过调用相关页面封装的类方法,并对相关元素输入测试参数,就可以方便快速执行用例,并且便于管理维护测试用例。

 第一步:先把场景代码写完(例如:QQ邮箱登陆)

public class AUTOLogin {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=qq%E9%82%AE%E7%AE%B1&rsv_pq=bcd7be330003bd22&rsv_t=f827%2F3ByNpHSATJDaN3zp54wpdUCgMQsbGSM%2FPh3PkJRJUTnkTLQK4Bq7Cc&rqlang=cn&rsv_enter=1&rsv_sug3=2&rsv_sug1=1&rsv_sug7=001&rsv_n=2");
        driver.manage().timeouts().implicitlyWait(10000, TimeUnit.SECONDS);
        driver.findElement(By.xpath(".//*[@id='content_left']/div[1]/h3/a")).click();
        
        driver.findElement(By.id("ud")).sendKeys("XXXXXX");
        driver.findElement(By.id("p")).sendKeys("XXXX");
        driver.findElement(By.id("login_button")).click();
        
    }

}

第二步:PageObject设计模式的应用

PageObject模式,以页面为单元,将业务逻辑和测试分别封装

例子中QQ邮箱登陆的业务场景包含两个页面:1.百度搜索QQ邮箱页面;2.QQ邮箱登陆页面(只用登陆页面)

 ①元素封装

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;

public class LoginPage {
    //将页面元素封装成LoginPage类的属性
    @FindBy(id = "ud")
    WebElement username_input;
    
    @FindBy(id = "p")
    WebElement password_input;
    
    @FindBy(id = "login_button")
    WebElement login_button;
    
    String url = "https://mail.qq.com/cgi-bin/loginpage";
    
    public WebDriver driver;
    
    public LoginPage(WebDriver driver){
        this.driver = driver;
        //PageFactory是页面工厂,用来初始化页面中的元素
        PageFactory.initElements(driver, this);
    }
    
    public void open(){
        driver.get(url);
    }
    
    public void inputUsername(String username){        
        username_input.sendKeys(username);        
    }
    public void inputPassword(String password){
        password_input.sendKeys(password);
    }
    public void clickLoginbutton(){
        login_button.click();
    }
    
}

②测试封装

import static org.junit.Assert.*;

import java.util.concurrent.TimeUnit;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import LoginPageDefine.LoginPage;

public class LoginTest {
    static WebDriver driver;
    
    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
    driver = new ChromeDriver();
    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    }

    @AfterClass
    public static void tearDownAfterClass() throws Exception {
    Thread.sleep(10000);
    driver.quit();
    }

    @Before
    public void setUp() throws Exception {
        
    }

    @After
    public void tearDown() throws Exception {
    
    }

    @Test
    public void test() {
        //实例化封装好的LoginPage类
        LoginPage loginPage = new LoginPage(driver);
        //调用LoginPage类中open方法
        loginPage.open();
        //输入用户名、密码,提交,也可以进一步对用户名密码做参数化
        loginPage.inputUsername("XXX");
        loginPage.inputPassword("123456");
        loginPage.clickLoginbutton();
        //fail("Not yet implemented");
    }

}

 

posted @ 2018-11-25 14:15  迷迷糊糊的礼物  阅读(403)  评论(0编辑  收藏  举报