PageObject思想
一、基本概念
它是一种设计模式,是实施selenium的最佳实践,能清楚的体现web应用和页面显示之间的关系。简单叙说就是把页面元素定位和元素操作方法还有页面业务分离。在设计过程中,对脚本进行分层:对象层、逻辑层、业务层、公共层。
1、对象库层
存放页面的元素信息,和页面特殊控件的操作方法。
2、逻辑层
存放一些封装好了的功能用例模块。
3、业务层
存放真正实现测试用例的操作。
4、公共层
在业务操作过程中,有几点是会经常变化的,比如页面访问地址、元素定位、业务流程-->构成功能页面,那么就可以采用: 元素定位 --> 元素操作 --> 业务流程 进行分层,进一步细化,元素操作中的数据、异常处理、报告生成可以作为公共部分进行处理。
二、为什么要使用PageObeject
1、使用Selenium实现业务测试会遇到哪些对像?
1.页面即Page,用来定位业务实现的位置;
2.页面元素即element,用来定位业务操作的对像。
基本的实现逻辑:基于某个页面,操作某个元素,实现某个特定的功能。
2、Selenium如何实现
1)get(url),定位某个页面
2)findelement(by_XXX),定位某个元素 locator
3)click/send/set......,操作元素、特定数据实现特定功能
4)组合不同功能,实现某个特定的业务
3、实现selenium自动化的难点
什么影响了测试代码的实现和维护:可能变化的内容。
如何减少可变化内容对代码的影响:分离可变和不可变内容,独立维护可变代码,减少可变代码对于整体代码的影响。
如何实现可变内容与不可变内容分离:参数化,分层调用。
三、PageObject设计的好处
1、减少代码的编码量,和代码的维护工作,明确尔清晰的业务测试流程
2、集中管理页面中的元素对象,便于应对页面元素的变化
3、集中管理一个page中的公共方法,便于测试用例的编写
4、后期维护更新方便,不需要重复的修改代码
四、设计概念示例
1、具体的做法如下
1、创建一个页面的类
2、在类的构造方法中,传递 WebDriver 参数。
3、在测试用例的类中,实例化页面的类,并且传递在测试用例中已经实例化的WebDriver对象。
4、在页面的类中,编写该页面的所有操作的方法
5、在测试用例的类中,调用这些方法
2、简单示例,登录
对象层: UserID, Password, Login
逻辑层: input(UserID), Input(Password), Click(Login Button)
业务层: login(input(UserID), Input(Password), Click(Login Button))
公共层: login url, driver, browser
软件设计的三层架构:界面层/表示层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer),高内聚低耦合,减少层次间的连系,减少变化带来的系统性变化。