一、概念
什么是PO/POM?
PO/POM是PageObjectModule(页面对象模式)的缩写,其目的是为了Web UI测试创建对象库。在这种模式下,应用涉及的每一个页面应该定义为一个单独的类。类中应该包含此页面上的页面元素对象和处理这些元素对象所需要的方法等。将流程所关联的页面作为对象,将对象串联起来,形成一个个不同的流程,POM是业内公认最佳的设计模式。
POM的优点:
- (1)PO提供了页面元素操作和业务流程相分离的模式,可以使测试的代码结构比之前清晰,可读性强。
- (2)更方便地复用对象和方法。
- (3)对象库是独立于测试用例的、统一的对象库,可以通过集成不同的工具类来达到不同的测试目的。比如集成UnitTest可以用来做单元测试、自动化/功能测试,同时也可以集成JBehave/Cucumber等来做验收测试。
- (4)使得整体自动化测试的优点变得更容易一些,如果有某个页面的元素需要变更,那么就可以直接更改封装好的页面元素类即可,而不用更改调用它的其他测试类/代码。这样整个的代码维护成本也会缩减。
PO的核心就是分层思想,把同属于一个页面的元素都放在一个页面类中。
二、简要结构设计
- 逻辑代码:基类,实现所有工具函数封装,类似于关键字驱动设计模式;
- 页面对象代码:基于系统页面,通过调用工具函数来实现业务的操作,生成对应的页面对象;
- 测试代码:基于测试需要,组件页面对象,实现核心流程的自动化,执行测试用例;
- 测试数据:为测试用例的执行提供所需要的测试数据。
三、POM框架
从图中可以看出PO模式主要分三层:
- 基础层BasePage:封装一些最基础的方法,元素定位,框架跳转等
- PO层:元素定位、获得元素对象,页面动作
- 测试用例层:业务逻辑,数据驱动
三者的关系:PO层继承继承层,测试用例层调用PO层。
进一步理解:
- 页面对象模型(PO)是一种设计模式,用来管理维护一组页面元素的对象库
- 在PO下,应用程序的每一个页面都有一个对应的Page类
- 每一个Page类维护着该页面的元素集和操作这些元素的方法
基本原则
- 每个页面都是一个类
- 所有的定位封装类的属性
- 操作行为封装成类的方法
- 相同的行为不同的结果创建为不同的方法
- 定位属性不要暴露给外部
- 不要在方法内进行断言
从0到1搭建PO模型框架
微信登录PO模式,先来做下分析:
- 封装页面,如:登录页面可以设计成LoginPage类
- 封装方法,如:登录页面的登录方法是login(username,password)
- 外部文件维护数,如:定位用户名和密码框的表达方法不写在代码里,放在外部文件中
- 页面元素属性化,如:只要涉及到要操作的元素名称,具体定位方式不在代码中,元素定位做到可以配置化,配置以键值对的形式存在。
深入理解PO基本原则,遵循设计步骤
根据前面的理论知识,举个登录的例子,首先梳理一遍登录流程:
- 要进行一次成功的登录,需要做哪些事情?
- 要进入登录页面,需要经过哪些页面?
- 要能够完成登录操作,需要操作哪些元素?
- 要完成这些元素的操作,又需要哪些操作?
经过分析,我们不难知道: - 要进行一次成功的登录:需要进入首页,然后点击登录按钮,再在登录页面输入正确的用户名和密码,最后点击登录按钮
- 要进入登录页面:成功进入首页,然后点击登录按钮
- 要能够完成登录操作:需要用户名和密码输入框、登录按钮
- 要完成这些元素操作:需要senk_key()、click()的方法
- 接下来可以记录下,完成登录的操作,一共经过两个页面:首页和登录页,当然为了简化起见,可以直接从登陆页开始。这里就确定了PO设计中的页面设计。
再根据前面PO模型的结构:可以把整个脚本再拆开,建立几个包:page、testcase等等。
较为完整的POM完整框架
- Base层:定义项目需要的基础方法,特别是一些基础操作,如元素click操作、sendkeys操作,调用JavaScript脚本的方法和其他一些与基本浏览器相关的操作。
- Common层:包含处理Excel文件的方法,获取项目路径、测试系统URL的信息和框架执行相关日志功能的实现方法。
- Data层:存放测试数据,在这里可以维护测试数据,这样存放是为了让项目的可维护性强、整体的条理性强。测试数据有时是自动化测试的驱动因素,因此对Data的管理和维护就显的特别重要。
- Logs层:存放项目在运行过程中产生的日志文件。
- PageObject层:这里是PO的核心层,该层不但涉及代码技术,还涉及对项目业务的分析,进而对项目的页面进行分析。
- Reports层:存放项目执行过程中产生的测试报告文件,测试报告是对测试结果的总结。
- TestCase层:管理测试用例和执行测试,相当于测试的总入口。
- config.ini:整个项目需要用到的配置项。
网友评论