当前位置: 首页 > news >正文

技术分享 | web自动化测试-PageObject 设计模式

为 UI 页面写测试用例时(比如 web 页面,移动端页面),测试用例会存在大量元素和操作细节。当 UI 变化时,测试用例也要跟着变化, PageObject 很好的解决了这个问题。

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

使用

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

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

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

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

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

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

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

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

http://www.lryc.cn/news/222585.html

相关文章:

  • Mall4cloud 微服务商城系统 2.0 发布
  • SpringBoot进制转换规则问题
  • 12.输入一个小于1000的整数,输出平方根(不是整数,输出整数部分)
  • Django框架的推导
  • 广东开放大学:电大搜题助力学子迎考利器
  • linux 7za 编译安装
  • 【Edge】微软Edge每次启动自动导入Chrome收藏夹,无法取消“每次启动浏览器时导入浏览数据”功能的解决方法(202311)
  • 报错RuntimeError: no valid convolution algorithms available in CuDNN
  • JSP通用材料收集归档系统eclipse定制开发mysql数据库BS模式java编程jdbc
  • 网络安全-零基础小白自学要点
  • SpringCloud——服务注册——Eureka
  • 大模型时代的编码习惯
  • 程序员怎样才能学好算法?这本书送几本给大家!
  • 2023-11-08 monetdb-事务-只有RR隔离级别-原因分析
  • 微信小程序:怎么在一个js中修改另一个js的数据(这里通过缓存进行实现)
  • 01-基于IDEA,Spring官网,阿里云官网,手动四种方式创建SpringBoot工程
  • map相关题目
  • JAVA 版小程序商城免费搭建 多商家入驻 直播带货 商城系统 B2B2C 商城源码之 B2B2C产品概述
  • moc_ XX.cpp 中的函数没有定义
  • 11.8代码
  • 常用的表单校验规则——邮箱/QQ/身份证号码/微信/电话/数字字母/整数/文本/密码等
  • Mysql数据库 11.SQL语言 储存过程 下 储存过程管理和游标
  • 如何在Visual Studio上创建项目并运行【超级详细】
  • 《C++ Primer》第7章 类(二)
  • git仓库代码克隆
  • AM@向量代数@向量基本概念和向量线性运算
  • 2023-11-08 LeetCode每日一题(最长平衡子字符串)
  • Web3.0的测试题
  • Javascript知识点详解:对象的继承、原型对象、原型链
  • 学之思开源考试系统部署至Centos7