- 概念:是一种设计模式。将面向过程转变为面向对象(页面对象),整体思想是分层。
- 将某个页面的所有“元素(包含控件)属性”及“元素操作”封装在一个类(Page类)中,以page为单位进行管理。
- 目的:
- 提高复用率,可读性和编写效率。
- 测试代码与被测页面对象代码分离,降低页面变化带来的维护成本。
- 尽量使用XPath,不建议使用name,link等。 xpath是基于页面元素所处的区域。
- 分层:
- 两层
- 对象库层:页面元素和操作;
- 业务层:测试用例操作;
- 三层
- 对象库层:页面元素和操作;
- 逻辑层:封装好的功能用例模块;
- 业务层:测试用例操作;
- 四层
- 对象库层:页面元素和操作;
- 逻辑层:封装好的功能用例模块;
- 业务层:测试用例操作;
- 数据层:测试数据
- 原则
- 方法意义
- 用公共方法代表UI所提供的的服务
- 方法应嘎爱返回其他PO 或返回用于断言的 数据
- 同样的行为不同的结果可建模为不同的方法
- 不要在方法中加断言
- 字段意义
- 不要暴露页面内部的元素给外部
- 不需要建模UI内的所有元素
- 实践
- 把每个要测试的对象封装在一个page内, 这个page里包含这个对象可能的所有操作。
- 创建一个BasePage,这个BasePage包含所有待测page都能用到的公用方法,这个BasePage对应的类应该是个抽象类。
- 测试脚本*引用page及page里的方法。
- python里有个第三方库page-objects, 基于python实现了PageObject模式,并且封装了很多有用的方法。
- webium是基于Python的一个Page Object实现。
- PO结构大致如下
- BasePage---对象层
- LoginPage---逻辑层
- test_login_case---业务层
- case越多使用PO模式会使代码结构更清晰
- 元素复用越多PO模式下维护非常容易
- 逻辑复用越多PO模式下维护非常容易 (如果逻辑复用多,需要多考虑逻辑层的颗粒度)
- 元素/逻辑/数据复用越多应选择更多层的PO模式