selenium的PageObject设计模式

时间:2024-10-03 08:03:37

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(, 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();
} }