Selenium | 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 的目的是通过给页面建模,从而对应用程序的使用者变得有意义:
{: width="50%"}
跳转到另一个页面,初始 page 对象应当 return 另一个 page 对象,比如点击注册,进入注册页面,在代码中就应该 return Register()
。如果想获取页面信息,可以 return 基本类型(字符串、日期)。
建议不要在 PageObject 中放断言。应该去测 PageObject,而不是让 PageObject 自己测自己,PageObject
的责任是提供页面的状态信息。这里仅用 HTML 描述 PageObject,这种模式还可以用来隐藏 Java swing UI 细节,它可用于所有 UI
框架。
Web自动化中PageObject设计模式处理就先讲到这里啦,大家还想看什么内容的文章也可以留言告诉我们哦!
** _
来霍格沃兹测试开发学社,学习更多软件测试与测试开发的进阶技术,知识点涵盖web自动化测试 app自动化测试、接口自动化测试、测试框架、性能测试、安全测试、持续集成/持续交付/DevOps,测试左移、测试右移、精准测试、测试平台开发、测试管理等内容,课程技术涵盖bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相关技术,全面提升测试开发工程师的技术实力
QQ交流群:484590337
公众号 TestingStudio
点击获取更多信息
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)