使用playwright进行自动化端到端测试
项目希望能接入自动化端到端测试提高可靠性,发现微软的 playwright 还挺好用的,推荐一下,顺便说下遇到的一些难点以及最佳实践。
难点
- 登录
- 项目不能帐号密码登录,只能扫二维码
-
临时方案是先自己扫码保存 cookie 用于测试,大概几天后才过期。可以用 codegen 搭配 save-storage 命令保存 cookie
npx playwright codegen github.com/microsoft/playwright --save-storage=auth.json可以保存cookie 到 auth.json,用npx playwright --load-storage=auth.json命令即可加载,也可以在测试文件中加载
-
长期的方案应该是跟后台同学 py,搞个长期有效的 cookie 或者测试帐号,可以只在测试环境、内网生效,规避外网风险
-
- 项目不能帐号密码登录,只能扫二维码
- 支付,项目有支付环节,目前有扫二维码支付、网银支付、转账,扫码应该是比较好测试的
-
暂时想到的方案是生成支付二维码后,截图推送给触发测试的人去扫码支付

-
对测试号配置一分钱测试商品方便测试
-
如果能确保支付环节不会出错,支付是外部稳定的第三方模块,也可以考虑用免费订单跳过支付环节?
-
最佳实践
https://playwright.nodejs.cn/docs/best-practices
测试理念
- 测试用户能看到的,不要依赖实现细节
- 测试尽可能隔离
- 避免测试第三方依赖
- 有数据库相关的要考虑数据变化是否影响测试
- 视觉回归测试要考虑操作系统和浏览器版本
tips
- 使用定位器的时候
- 支持链式,使用过滤搜索小范围
- 优先用面向用户的属性,而不是 css 选择器
- 用能够适应 dom 变化的定位器,比如ARIA role、 ARIA 参数和可访问的名称
page.getByRole('tab', { name: '其它' }) - 可以用codegen 功能来生成定位器,如
npx playwright codegen github.com/microsoft/playwright,他会帮你找到最适合的定位器(太好用了!)
- 使用web first断言(assertions),playwright 会等待,直到条件达成
- 比如发了个取消请求,语气能看到取消成功的提示,可以这样写
await expect(page.getByText('取消成功')).toBeVisible(),toBeVisible()这种断言会等待和重试 - await要写在 expect 前面,如果像
expect(await page.getByText('welcome').isVisible()).toBe(true);这样,会立即检查定位器能否找到并返回结果,不会去等待重试
- 比如发了个取消请求,语气能看到取消成功的提示,可以这样写
- 调试
- 安装 VSCode 插件调试
- trace viewer 能看截图,能看时间线
- test 加 ui 命令能可视化测试过程
- 在配置里可以很方便的测多几种浏览器
- 及时更新 playwright 依赖
- CI 中跑测试
- 测试文件接入 lint
- 并行跑测试,playwright 对于一个文件的测试是按顺序跑的,可同时跑多个文件,如果对单个文件也想并行跑,可以这样写
- 用 soft 断言,可以不终止测试
expect.soft
其他
无障碍访问
Web 无障碍访问 (也称为 a11y) 是指创建可供任何人使用的网站的做法——无论是身患某种障碍、通过慢速的网络连接访问、使用老旧或损坏的硬件,还是仅处于某种不方便的环境。例如,在视频中添加字幕可以帮助失聪、有听力障碍或身处嘈杂环境而听不到手机的用户。同样地,确保文字样式没有处于太低的对比度,可以对低视力用户和在明亮的强光下使用手机的用户都有所帮助。
ARIA roles
相关文章:
使用playwright进行自动化端到端测试
项目希望能接入自动化端到端测试提高可靠性,发现微软的 playwright 还挺好用的,推荐一下,顺便说下遇到的一些难点以及最佳实践。 难点 登录 项目不能帐号密码登录,只能扫二维码 临时方案是先自己扫码保存 cookie 用于测试&#…...
ES实战-相关性搜索
ES打分机制 1.TF-IDF 词频-逆文档频率 2.Okapi BM25 3.随机性分歧- DFR相似度 4.基于信息 - IB相似度 5.LM Dirichlet 相似度 6.LM Jelinek Mercer相似度 解释一个查询的结果集 curl -XPOST localhost:9200/get-together/_search?pretty -H Content-Type: application/json -…...
MQTT的学习与应用
文章目录 一、什么是MQTT二、MQTT协议特点三、MQTT应用领域四、安装Mosquitto五、如何学习 MQTT 一、什么是MQTT MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,设计用于在低带宽、不稳定的网络环境中进行高效的通信…...
编译原理实验1——词法分析(python实现)
文章目录 实验目的实现定义单词对应的种别码定义输出形式:三元式python代码实现运行结果检错处理 总结 实验目的 输入一个C语言代码串,输出单词流,识别对象包含关键字、标识符、整型浮点型字符串型常数、科学计数法、操作符和标点、注释等等。…...
C语言——oj刷题——模拟实现库函数strlen
目录 方法一:迭代法 方法二:递归法 方法三:指针算术法 方法四:汇编指令法 当我们使用C语言进行字符串操作时,经常会用到库函数strlen来获取字符串的长度。strlen函数的作用是计算一个以null字符结尾的字符串的长度…...
对进程与线程的理解
目录 1、进程/任务(Process/Task) 2、进程控制块抽象(PCB Process Control Block) 2.1、PCB重要属性 2.2、PCB中支持进程调度的一些属性 3、 内存分配 —— 内存管理(Memory Manage) 4、线程(Thread)…...
「数据结构」线性表
定义和基本操作 定义:相同数据类型的 n ( n ≥ 0 ) n(n \ge 0) n(n≥0)个数据元素的有限序列,其中n为表长,当n0时线性表是一个空表一般表示: L ( a 1 , a 2 , … … , a i , a i 1 , a n ) L(a_1,a_2,……,a_i,a_{i1},a_n) L(a…...
GEE:关于在GEE平台上进行回归计算的若干问题
作者:CSDN _养乐多_ 记录一些在Google Earth Engine (GEE)平台上进行机器学习回归计算的问题和解释。 文章目录 一、回归1.1 问:GEE平台上可以进行哪些机器学习回归算法?1.2 问:为什么只有这四种…...
Vivado -RAM
ip_ram 定义了一个名为ip_ram的模块,该模块具有以下端口: sys_clk:系统时钟输入。 sys_rst_n:系统复位输入。 module ip_ram( input sys_clk, input sys_rst_n);wire ram_en ; wire ram_wea …...
备战蓝桥杯---图论之最短路dijkstra算法
目录 先分个类吧: 1.对于有向无环图,我们直接拓扑排序,和AOE网类似,把取max改成min即可。 2.边权全部相等,直接BFS即可 3.单源点最短路 从一个点出发,到达其他顶点的最短路长度。 Dijkstra算法&#x…...
C#系列-C#实现秒杀功能(14)
在C#中实现商品秒杀功能,通常需要考虑并发控制、数据库事务、缓存策略、限流措施等多个方面。下面是一个简单的示例,演示了如何使用C#和数据库来实现一个基本的商品秒杀功能。 首先,假设你有一个商品表(Product)和一个…...
Java ‘Elasticsearch‘ 操作
依赖 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-elasticsearch --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</ar…...
【AI视野·今日NLP 自然语言处理论文速览 第七十八期】Wed, 17 Jan 2024
AI视野今日CS.NLP 自然语言处理论文速览 Wed, 17 Jan 2024 (showing first 100 of 163 entries) Totally 100 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Deductive Closure Training of Language Models for Coherence, Accur…...
实验5-4 使用函数计算两点间的距离
本题要求实现一个函数,对给定平面任意两点坐标(x1,y1)和(x2,y2),求这两点之间的距离。 函数接口定义: double dist( double x1, double y1, double x2, double y2 );其中用户传入的参数为平面上两个点的坐标(x1, y1)和(x2, y2)&…...
【JavaEE】_JavaScript(Web API)
目录 1. DOM 1.1 DOM基本概念 1.2 DOM树 2. 选中页面元素 2.1 querySelector 2.2 querySelectorAll 3. 事件 3.1 基本概念 3.2 事件的三要素 3.3 示例 4.操作元素 4.1 获取/修改元素内容 4.2 获取/修改元素属性 4.3 获取/修改表单元素属性 4.3.1 value…...
ARM交叉编译搭建SSH
首先搭建好arm-linux交叉编译环境,开发板和主机可以ping通。 一、下载需要的源码 下载zlib: zlib-1.2.3.tar.gz 下载ssl: openssl-0.9.8d.tar.gz 下载ssh: openssh-4.6p1.tar.gz 二、交叉编译 新建目录/home/leo/ssh,并且将三个源码复制到该目录下。…...
###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
前言:感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步。 目录 一. 延时函数的生成 1.通过延时计算器得到延时函数 2.可赋值改变…...
回归预测模型:MATLAB多项式回归
1. 多项式回归模型的基本原理 多项式回归是线性回归的一种扩展,用于分析自变量 X X X与因变量 Y Y Y之间的非线性关系。与简单的线性回归模型不同,多项式回归模型通过引入自变量的高次项来增加模型的复杂度,从而能够拟合数据中的非线性模式。…...
「计算机网络」数据链路层
数据链路层的地位:网络中的主机、路由器等都必须实现数据链路层信道类型 点对点信道:使用一对一的点对点通信方式广播信道 使用一对多的广播通信方式必须使用专用的共享信道协议来协调这些主机的数据发送 使用点对点信道的数据链路层 数据链路和帧 链…...
【Linux】Ubuntu 22.04 升级 nodejs 到 v18
Ubuntu 22.04 已经安装的nodejs 版本 nodejs is already the newest version (12.22.9~dfsg-1ubuntu3.3). 删除以前的 nodejs 版本: 1. sudo apt remove nodejs rooterp:~# sudo apt remove nodejs Reading package lists... Done Building dependency tree..…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
前端开发者常用网站
Can I use网站:一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use:Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站:MDN JavaScript权威网站:JavaScript | MDN...
快速排序算法改进:随机快排-荷兰国旗划分详解
随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...
