无论您用selenium、appium还是playwright都必须使用PO设计模式

随着UI自动化测试工具可选性越来越多,工具也越来越稳定,前几年关于自动化测试架构设计的概念逐渐淡化,但是自动化架构设计中最有用的PO设计模式思想依然需要刚入门自动化测试领域的小白深刻掌握,本文就带大家理解什么是PO设置模式以及对其优化的具体方案。

什么是PO设计模式

Page Object直译就是页面对象,也就是把界面定位和业务操作分开。它是自动化测试项目开发实践的最佳设计模式之一,通过对界面元素的封装减少冗余代码,同时在后期维护中,若元素定位发生变化,只需要调整页面元素封装的代码进而提高测试用例的可维护性。

PO模式引入原因

做过UI自动化的同学都知道,在做UI自动化时定位特别依赖页面,一旦页面发生变更就不得不跟着去修改页面定位。假设你脚本中有10处对这个元素做了这个操作,哪天这个控件的元素变了,你就不得不去修改10个地方;

另外一个引入PO模式的好处是我们可以统一变量的命名规则,让我们一看变量的命名就可以知道页面中操作的是哪个元素了(当你写过具体业务以后,这点自然就懂了)

PO模式设计方法

这里举一个自动化测试非常经典的例子,在百度搜索框中查找关键字,录制代码如下:

这里以selenium 的java代码为例

 driver.findElement(By.id("kw")).clear();

 driver.findElement(By.id("kw")).sendKeys("selenium3");

 driver.findElement(By.id("su")).click();

引入PO模式该如何实现呢?

首先创建ObjectStore类,创建关于输入框和搜索按钮的变量。

public static final String Search_Inputbox="kw";

public static final String Search_Button="su";

然后,在脚本中就可以这样书写了

driver.findElement(By.id(ObjectStore. Search_Inputbox)).clear();

driver.findElement(By.id(ObjectStore. Search_Inputbox)).sendKeys("selenium3");

driver.findElement(By.id((ObjectStore. Search_Button)).click();

这样是不是就解决了页面元素发生变更需要批量修改脚本以及变量统一命名的问题了呢?

最后的总结

在传统的PO模式下,要求应用程序的每一个页面都有一个对应的page class,每一个page class维护着该web页的元素集和操作这些元素的方法。在实际工作中并不需要严格按照该要求进行设计,我们可以把多个页面中的元素同时维护到一个ObjectStore类,通过注释进行区分标识即可。

我的每一篇文章都希望帮助读者解决实际工作中遇到的问题!如果文章帮到了您,劳烦点赞、收藏、转发!您的鼓励是我不断更新文章最大的动力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/216316.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fastapi.templating与HTMLResponse

要声明一个模板对象,应将存储html模板的文件夹作为参数提供。在当前工作目录中,我们将创建一个 “templates “目录。 templates Jinja2Templates(directory“templates”) 我们现在要把这个页面的HTML代码渲染成HTMLResponse。让我们修改一下hello()函…

LeetCode:1631. 最小体力消耗路径(SPFA Java)

目录 1631. 最小体力消耗路径 题目描述: 实现代码与解析: BFSDP 原理思路: 1631. 最小体力消耗路径 题目描述: 你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表…

electron命令下载失败,手动安装教程

现象:pnpm i electron, 一直卡在提示错误node install.js 一 、下载需要的electron版本 地址 二、下载完毕,解压压缩包, 进入项目的node_modules/electron文件夹,创建dist文件夹,将下载的zip包里的文件复制到dist…

【详解优先级队列(堆)】

目录 堆的概念 堆的性质 堆的存储方式 堆的创建 堆的向下调整 向下过程(以小堆为例) 向下过程(以大堆为例) 建堆的时间复杂度O(n) 堆的插入与删除 堆的插入 向上调整建堆的时间复杂度O(nlogn) 堆的删除 常见习题 常用接口介绍 PriorityQueue的特性 Pri…

16:00的面试,16:07就出来了,问的问题过于变态了。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到六月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40…

【IDEA】IntelliJ IDEA创建一个Maven项目

在IDEA中创建Maven项目,前提是已经安装配置好Maven环境 。 本文主要使用的是IntelliJ IDEA 2022.2.1 (Community Edition) 1.创建一个新project:File>Project 2.修改Maven配置:File>Settings>搜索maven 创建好的工程如下: src/main…

DNS漫游指南:从网址到IP的奇妙之旅

当用户在浏览器中输入特定网站时发生的整个端到端过程可以参考下图 1*4vb-NMUuYTzYBYUFSuSKLw.png 问题: 什么是 DNS? 答案 → DNS 指的是域名系统(Domain Name System)。DNS 是互联网的目录,将人类可读的域名&#…

Python码上行动系列丛书(由北京大学出版社出版)

前言 Python码上行动系列丛书火热来袭💥💥💥 三册在手,Python全掌握!无论是初学者还是进阶玩家,我们都有你想要的! 让ChatGPT带你轻松入门Python编程,享受编程带来的乐趣&#xff0…

快速准确翻译文件夹名:英文翻译成中文,文件夹批量重命名的技巧

在处理大量文件夹时,可能会遇到要将英文文件夹名翻译成中文的情况。同时也可能要批量重命名这些文件夹。今天一起来看下云炫文件管理器如何快速准确翻译文件夹名,进行批量重命名的技巧。 下图是文件夹名翻译前后的效果图。 英文文件夹名批量翻译成中文…

UE4.27-UE5.1设置打包Android环境

打包Android配置文件 1. 配置打包Android的SDK需求文件位于下面文件中: 2. 指定了对应的SDK环境变量名字以及NDK需求等: UE4.27-UE5.1--脚本自动配置 安装前提 1. 务必关闭虚幻编辑器和Epic Games Launcher,以确保NDK组件的安装或引擎环境…

node.js安装和配置

软件介绍 Node.js是一个免费的、开源的、跨平台的JavaScript运行时环境,允许开发人员在浏览器之外编写命令行工具和服务器端脚本。 Node.js是一个基于Chrome JavaScript运行时建立的一个平台。 Node.js是一个事件驱动I/O服务端JavaScript环境,基于Googl…

排序算法之四:直接选择排序

1.基本思想 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。 2.直接选择排序 在元素集合array[i]--array[n-1]中选择关键码最大(小)的数据元素 若它不是这组元素中的…

stateflow 之图函数、simulink函数和matlab函数使用及案例分析

目录 前言 1. 图函数graph function 2.simulink function 3.matlab function 4.调用stateflow中的几种函数方式 前言 对于stateflow实际上可以做simulink和matlab的所有任务,可以有matlab的m语言,也可以有simulink的模块,关于几种函数在…

11.仿简道云公式函数实战-逻辑函数-TRUE

1. TRUE函数 TRUE 函数可直接返回逻辑值 true。 2. 函数用法 TRUE() 3. 函数示例 TRUE 函数一般不会作为函数单独使用,可与其他函数一起使用,或作为判断逻辑的结果。如,判断字段值是否为空时,设置公式为IF(ISEMPTY(方案选择)…

在linux服上使用nginx+tomcat部署若依前后端分离版本(RuoYi-Vue)

一、先拉工程,地址:RuoYi-Vue: 🎉 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本 二、在window上用idea打开跑通,可参考…

MFC CLXHHandleEngine动态库-自定义设置对话框使用

实现的效果如下所示: void CSampleDlg::OnBnClickedButton2() { // TODO: 在此添加控件通知处理程序代码 CSgxMemDialog dlg(180, 100); dlg.SetEnable(true); dlg.SetWindowTitle(_T("自定义对话框")); dlg.AddStatic(1000, //控件资源…

数据结构算法-希尔排序算法

引言 在一个普通的下午,小明和小森决定一起玩“谁是老板”的扑克牌游戏。这次他们玩的可不仅仅是娱乐,更是要用扑克牌来决定谁是真正的“大老板”。 然而,小明的牌就像刚从乱麻中取出来的那样,毫无头绪。小森的牌也像是被小丑掷…

nodejs微信小程序+python+PHP沧州地区空气质量数据分析系统-计算机毕业设计推荐 django

本系统不仅主要实现了注册登录,系统首页,个人中心,用户管理,城市区域管理,空气状况管理,空气质量管理,系统管理,数据爬取,大屏分析等功能,通过这些功能基本可…

面向 SEO 专业人士的完整 Google Search Console 指南

了解 Google Search Console 并释放其功能,以改善您的网站运行状况和搜索性能。 Google Search Console 提供监控网站在搜索中的表现和提高搜索排名所需的数据,这些信息只能通过 Search Console 获得。 这使得它对于热衷于最大化成功的在线业务和出版商…

NLP项目实战01--电影评论分类

介绍: 欢迎来到本篇文章!在这里,我们将探讨一个常见而重要的自然语言处理任务——文本分类。具体而言,我们将关注情感分析任务,即通过分析电影评论的情感来判断评论是正面的、负面的。 展示: 训练展示如下…