Page Object(页面对象)模式,是一种将页面元素定位和元素操作方法按照页面抽象出来,分离成一定的对象,然后再进行组织的一种设计模式,类似于java中的MVC 模式,代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。
如果不使用pageObeject设计模式,在web自动化测试,当页面变化时,就意味着以前的定位元素方法不能用了,需要重新修改元素定位方式,要一个一个的从测试脚本中把需要修改的元素定位方式找出来,然后再进行修改。这会使脚本维护的成本变高,更达不到自动化测试的初衷。 PageObject模式可以完美解决这个问题。
PageObject 的优点
减少代码冗余
业务和实现分离
降低代码维护成本
PageObject 的概念
页面对象,并将页面元素定位方法和元素操作进行分离。
在实际自动化测试实战过程中,我们一般对脚本的实现分为三层:
对象层: 用于存放页面元素定位和控件操作
逻辑层: 存放一些封装好的功能用例模块
业务层: 则是我们真正的测试用例的操作部分
PageObject 的六大基本原则
方法意义
◆用公共方法代表UI所提供的功能
◆方法应该返回其他的PageObject或者返回用于断言的数据
◆同样的行为不同的结果可以建模为不同的方法
◆不要在方法内加断言
字段意义
◆不要暴露页面内部的元素给外部
◆不需要建模UI内的所有元素
登录场景
◆登陆页面提供login findPassword功能
◆Login类+ login findPassword方法
◆登录页面内的元素有多少并不关心,隐藏内部界面控件
◆登录成功和失败会分别返回不同的页面
◆findPassword
◆loginSuccess
◆loginFail
◆通过方法返回值判断登录是否符合预期
代码示例:
以企业微信为例
父类方法:
public class BasePage {
WebDriver driver;
public BasePage(WebDriver driver){
this.driver=driver;
}
public BasePage() {
}
void click( By by ){
driver.findElement(by).click();
}
void sendKeys(By by,String content){
driver.findElement(by).sendKeys(content);
}
}
package test.com.wxtest.web;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import org.openqa.selenium.By;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.chrome.ChromeDriver;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* @param
* @Auther: zhangcheng
* @Date: 2020/11/16