ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

selenium自动化设计框架之 page object设计模式介绍

2021-01-14 15:33:21  阅读:443  来源: 互联网

标签:封装 object selenium UI PageObject 设计模式 page 页面


pageobject设计思想出自于马丁·福勒(Martin Flower,对,没错,就是软件教父)官网的一篇文章,官网连接:https://martinfowler.com/bliki/PageObject.html
还有一篇针对官网文章的中文翻译版:http://huangbowen.net/blog/2013/09/17/page-object
所以,如果你的英文不是很好,不妨看下中文版的,文章讲解的非常详细

PageObject 简介

在为 UI 页面写测试用例时(比如 Web 页面,移动端页面),测试用例会存在大量元素和操作细节。如何面对当 UI 变化时,测试用例也要跟着变化这个问题?PageObject 设计模式闪亮登场(由 IT 大佬 Martin Flower 提出)。

使用 UI 自动化测试工具时(Selenium、Appium 等),如果无统一模式进行规范,随着用例的增多会变得难以维护,而 PageObject 让自动化脚本井井有序,将 page 单独维护并封装细节,可以使 testcase 更稳健,不需要大改动。

PageObject 使用

具体做法:把元素信息和操作细节封装到 Page 类中,在测试用例上调用 Page 对象(PageObject),比如存在一个功能“选取相册标题”,需要为之建立函数selectAblumWithTitle(),函数内部是操作细节findElementsWithClass('album')等:

以选“取相册标题”举例,伪代码如下:

selectAblumWithTitle() {
    #选取相册
    findElementsWithClass('album')
    #选取相册标题
    findElementsWithClass('title-field')
    #返回标题内容
    return getText()

}

PageObject 的主要原则是提供一个简单接口 (或者函数,比如上述的 selectAblumWithTitle ),让调用者在页面上可以做任何操作,点击页面元素,在输入框输入内容等。因此,如果要访问一个文本字段,Page Object 应该有获取和返回字符串的方法。Page Object 应该封装对数据的操作细节,比如查找元素和点击元素。当页面元素改动时,应该只改变 Page 类中的内容,不需要改变调用它的地方。

不要为每个 UI 页面都创建一个 page 类,应该只为页面中重要的元素创建 page 类。比如,一个页面显示多个相册,应该创建一个相册列表 page object,它包含许多相册 page object。如果某些复杂 UI 的层次结构只是用来组织 UI,那么它就不应该出现在 page object 中。page object 的目的是通过给页面建模,从而对应用程序的使用者变得有意义:

如果你想导航到另一个页面,初始 page 对象应当 return 另一个 page 对象,比如点击注册,进入注册页面,在代码中就应该 return Register()。如果想获取页面信息,可以 return 基本类型(字符串、日期)。

建议不要在 page object 中放断言。应该去测 page object,而不是让 page object 自己测自己,page object 的责任是提供页面的状态信息。这里仅用 HTML 描述 Page Object,这种模式还可以用来隐藏 Java swing UI 细节,它可用于所有 UI 框架。

PageObject 六大原则

Selenium 针对 PageObject 的核心思想凝聚出了六大原则,掌握六大原则精髓,才可以进行 PageObject 最佳实践演练:

  • 公共方法代表页面提供的服务
  • 不要暴露页面细节
  • 不要把断言和操作细节混用
  • 方法可以 return 到新打开的页面
  • 不要把整页内容都放到PO 中
  • 相同的行为会产生不同的结果,可以封装不同结果

下面,对上述六大原则进行更详细的实操解释:
原则一:要封装页面中的功能(或者服务),比如点击页面中的元素,可以进入到新的页面,于是,可以为这个服务封装方法“进入新页面”。
原则二:封装细节,对外只提供方法名(或者接口)。
原则三:封装的操作细节中不要使用断言,把断言放到单独的模块中,比如 testcase。
原则四:点击一个按钮会开启新的页面,可以用 return 方法表示跳转,比如return MainPage()表示跳转到新的PO:MainPage。
原则五:只为页面中重要的元素进行 PO 设计,舍弃不重要的内容。
原则六:一个动作可能产生不同结果,比如点击按钮后,可能点击成功,也可能点击失败,为两种结果
封装两个方法,click_success和click_error。

标签:封装,object,selenium,UI,PageObject,设计模式,page,页面
来源: https://www.cnblogs.com/feng0815/p/14277401.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有