大家好,又见面了,我是你们的朋友全栈君。
Page Object模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Class(封装在一个class类中),其中包含页面中需要测试的所有元素(按钮,输入框,标题等)的属性和操作,这样在Selenium测试页面中可以通过调用页面类来获取页面元素,这样巧妙的避免了当页面元素id或者位置变化时,需要改测试页面代码的情况。当页面元素id变化时,只需要更改测试页Class中页面的属性即可。
强调测试、逻辑、数据和驱动相互分离。
目的: 测试代码与被测页面对象代码分离,后期如果有页面元素发生了更改,只需要修改相应页面对象的代码(即对应Class文件),而不需要修改测试代码
它的好处如下:
- 集中管理元素对象
- 集中管理一个page内的公共方法
- 后期维护方便
一、测试用例:使用单元测试框架
二、业务模块:使用 Page Object 设计模式,设计 Common 类
三、封装驱动:
- 封装单一的工具,或者多个工具都可以
- 封装 WebDriver(Selenium)成为 BoxDriver,支持Web UI 自动化测试
- 封装其他特定工具 成为 DbDriver,支持数据库测试
- 封装接口测试工具 成为 ServiceDriver,支持集成测试,接口测试
- 封装 Appium工具 成为 AppDriver,支持移动APP UI自动化测试
PO设计
WebDriver封装
- 这里是对Selenium的封装,完成封装以后的基本封装代码。
- 新建 base 包
- 新建 BoxDriver.java 放置 Selenium类的封装
Page 基类
-
设计了一个基本的Page类,以便所有的页面进行继承,该类标明了一个sub page类的基本功能和公共的功能。
-
全局变量: this.baseDriver,让所有的子类都使用的。
- 构造方法:
-
传递 driver的构造方法
public BasePage(BoxDriver driver) { this.baseDriver = driver; }
-
默认的构造方法,无参数的构造方法
public BasePage() { }
-
私有的常量:存放元素的定位符
private String START_BUTTON_SELECTOR = "s,#start > div"; private final String EXIT_MENU_TEXT = "l,%s";
-
成员方法:
-
每个子类都需要的系统功能:
-
open
public void open(String url) throws InterruptedException { this.baseDriver.navigate(url); Thread.sleep(2000); }
-
-
所有子类(页面)都具有的业务功能
- selectApp
- logout
-
-
-
Sub Pages(s)子类
-
具体的页面的类,定义了某个具体的页面的功能
-
必须继承基类
public class AdminPage extends BasePage { }
-
创建构造方法,带driver 参数
public AdminPage(BoxDriver driver) { super(driver); }
-
特定页面的业务
-
使用基类的 this.baseDriver
-
-
作者:立师兄Linty
链接:https://www.jianshu.com/p/b164dd76502d
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。 -
Tests 类
-
这部分描述的是具体的测试用例。
-
声明全局变量
private BoxDriver baseDriver = null; private String baseUrl = null; private LoginPage loginPage = null; private AdminPage adminPage = null;
-
调用各种页面(pages)
-
实例化Page
this.loginPage = new LoginPage(this.baseDriver); this.adminPage = new AdminPage(this.baseDriver);
-
使用page的对象,调用成员方法
loginPage.open(this.baseUrl); loginPage.changeLanguage(lang); loginPage.login("admin", "123456", true); loginPage.selectApp(AppType.Admin); adminPage.clickAddMemberButton(); adminPage.addMemberData(member);
-
-
https://www.jianshu.com/p/b164dd76502d
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144060.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...