有关Page Object文章很多,第一次认真的看待Page Object,从自己的角度解释对Page Object的理解。
不断实践、总结和修改。
Page Object,页面对象。 -- 我的理解就是页面元素的定位与操作。
一种设计模式,实施selenium的最佳实践,体现了web应用与页面显示之间的关系。
为什么需要Page Object,测试代码维护的需要:减少代码的编码量,减少代码的维护量,清晰而明确的业务测试流程。
Page Obje实现了测试代码的分层:页面元素、元素操作 和 页面业务的分离。
使用Selenium实现业务测试会遇到哪些对像?
1.页面即Page,用来定位业务实现的位置;
2.页面元素即element,用来定位业务操作的对像。
基本的实现逻辑:基于某个页面,操作某个元素,实现某个特定的功能。
Selenium如何实现
1)get(url),定位某个页面
2)findelement(by_XXX),定位某个元素 locator
3)click/send/set......,操作元素、特定数据实现特定功能
4)组合不同功能,实现某个特定的业务
什么影响了测试代码的实现和维护:可能变化的内容。
如何减少可变化内容对代码的影响:分离可变和不可变内容,独立维护可变代码,减少可变代码对于整体代码的影响。
如何实现可变内容与不可变内容分离:参数化,分层调用。
真正的业务实现过程中,我们会发现有这几点是可变的,也会经常变化的:
1)页面访问地址(url)
2)元素定位(locator)
3)业务流程(process) --> 构成功能页面 --> test scenario
那么就可以采用: 元素定位 --> 元素操作 --> 业务流程 进行分层,进一步细化,元素操作中的数据、异常处理、报告生成可以作为公共部分进行处理。
即Page Object,元素层,操作层,业务层,公共层
简单示例,登录
Locator: UserID, Password, Login
Operation: input(UserID), Input(Password), Click(Login Button)
Process: login(input(UserID), Input(Password), Click(Login Button))
Common: login url, driver, browser
----------------------------------------------------------------------------------
软件设计的三层架构:界面层/表示层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer),高内聚低耦合,减少层次间的连系,减少变化带来的系统性变化。
BDD,Behavior Driven Development,user story(角色+目标+操作) + view(condition+operation+feedback)