selenium的PageObject设计模式

Posted 爱吃橙子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium的PageObject设计模式相关的知识,希望对你有一定的参考价值。

PageObject设计模式
1. Web自动化测试框架(WebTestFramework)是基于Selenium框架且采用PageObject设计模式进行二次开发形成的框架。 

2. web测试时,建议强烈推荐使用_谷歌或_火狐浏览器。

3. PageObject设计模式:是将某个页面的所有"元素(包含控件)属性"及"元素操作"封装在1个类(Class)里面,以page为单位进行管理。

4. 目的: 测试代码与被测页面对象代码分离,后期如果有页面元素发生了更改,只需要修改相应页面对象的代码(即对应Class文件),而不需要修改测试代。

5. 尽量采用xpath方式来寻找页面元素,而不建议使用name,Link等方法; xpath是基于页面元素所处区域,一般不会发生变化,测试代码基本不受干扰。

6. 将页面元素属性信息与代码分离,即与被测对象代码分离,目的也是为了进一步降低后续因页面变化带来的维护成本。

一、公共类,操作浏览器相关的

import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

public class TestBase {
    protected WebDriver driver;
    
    @BeforeTest
    public void setUp() throws Exception {
        driver = new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    }
    
    @AfterTest
    public void tearDown() throws Exception {

        driver.quit();
    }

}

二、登录页面存放的元素

import org.openqa.selenium.By;
import org.openqa.selenium.NotFoundException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

public class LoginPage {
    private WebDriver driver;

    public LoginPage(WebDriver driver) {
        this.driver = driver;
    }
    
    /**
     * 用户名
     * 
     * @param driver
     * @param userText
     */
    public void setPhone(String phoneText) throws NotFoundException {
        // driver.findElement(By.id("username")).clear();
        // driver.findElement(By.id("username")).sendKeys(userText);
        this.setText(driver.findElement(By.id("username")), phoneText);
    }
    
    /**
     * 密码
     * 
     * @param driver
     * @param userText
     */
    public void setPass(String passText) throws NotFoundException {
        // driver.findElement(By.id("username")).clear();
        // driver.findElement(By.id("username")).sendKeys(userText);
        this.setText(driver.findElement(By.id("password")), passText);
    }
    
    /**
     * 点击登录按钮
     * 
     * @param driver
     */
    public void clickButton() throws NotFoundException {
        driver.findElement(By.id("butt")).click();
    }

    private void setText(WebElement e,String text)
    {
        e.clear();
        e.sendKeys(text);
    }

}

三、登录页面提供的方法

import org.openqa.selenium.WebDriver;
import com.page.LoginPage;


public class LoginBuss {
private WebDriver driver;
    
    public LoginBuss(WebDriver driver) {
        this.driver = driver;
    }
    /**
     * 定义登陆业务
     * 
     * @param driver
     * @param usename
     * @param password
     * @return
     * @throws InterruptedException
     */
    public void login(String username, String password)
            throws Exception {
        driver.get("xxxxxxxxx");//打开测试网址
        
        LoginPage login_page = new LoginPage(driver);
        
        login_page.setPhone(username);//输入用户名
        login_page.setPass(password);// 输入密码
        login_page.clickButton();//点击登录按钮
    }

}

四、测试用例

import java.lang.reflect.Method;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.bussiness.LoginBuss;
public class loginCase extends TestBase{

    // 用户成功登陆
    @Test
    public void LoginSucc() throws Exception {
        LoginBuss lb = new LoginBuss(driver);
        lb.login("xxx", "123abc");// 调用登录的一个事务
        Thread.sleep(1000);        
    }

}

 

以上是关于selenium的PageObject设计模式的主要内容,如果未能解决你的问题,请参考以下文章

Selenium的PageObject设计模式

selenium(10)-PageObject模式的解释

selenium的PageObject设计模式

Selenium系列(二十) - PageObject模式的详细介绍

Selenium+PageObject+Java实现测试用例

Selenium_Page Object设计模式