1. 前言之前做 Web 自动化测试时我主要使用 JavaScript Puppeteer基于已有开源框架进行二次开发并逐步将手工回归测试转化为自动化测试。最近重新整理自己的自动化测试项目发现大量自动化测试招聘需要Playwright技术所以决定使用Playwright TypeScript做一个Demo。为什么没有继续使用熟悉的 Puppeteer主要原因不是 Puppeteer 不好用而是对于一个新的 E2E 自动化测试项目我更希望测试框架本身能够提供完整的测试运行、断言、报告和 CI/CD 集成能力。这篇文章简单对比 Puppeteer 和 Playwright并通过一个 Demo 介绍 Playwright TypeScript 的基本使用。2. Puppeteer 和 Playwright 有什么区别Puppeteer 和 Playwright 都可以通过代码控制浏览器实现页面跳转、元素定位、点击、输入和截图等操作。区别主要在于工具定位和测试工程化能力。对比项PuppeteerPlaywright Test主要用途浏览器自动化Web E2E 自动化测试JavaScript / TypeScript支持支持浏览器Chrome、Firefox 等Chromium、Firefox、WebKit自动等待支持部分等待机制Locator 与自动重试断言集成测试运行器通常结合其他工具内置断言通常结合断言库内置 expect并行执行需要结合具体工具实现内置支持测试报告依赖测试工具组合内置 HTML ReportCI/CD支持支持并提供完整测试工具链对于单纯的浏览器操作两者都可以完成。如果目标是搭建一套可持续维护的 Web E2E 自动化测试框架Playwright Test 的集成能力会更加方便。Trace 功能巨好用。3. 为什么选择 Playwright TypeScript3.1 自动等待与断言UI 自动化测试经常遇到的问题是页面还没有加载完成测试脚本就开始操作元素。我很喜欢用下面这个方法但固定等待有缺陷awaitpage.waitForTimeout(3000);这种方式既可能等待时间不足也可能浪费时间执行。Playwright 提供 Locator 和自动重试断言awaitpage.getByRole(button,{name:Submit}).click();awaitexpect(page.getByText(Completed)).toBeVisible();点击 Submit 按钮后检查页面是否出现 Completed以此判断操作是否成功。如果页面内容没有立即更新Playwright 会自动等待一段时间不需要我们手动添加固定等待。优点点击前的等待如果 Submit 按钮还不能点击Playwright 会自动等待按钮变得可点击然后执行 click()。点击后的等待如果 Completed 还没出现toBeVisible() 不会立即报错而是反复检查直到内容出现或超时。这两个步骤都自带等待机制。相比大量使用固定等待这种方式更适合处理常见的异步页面状态。3.2 内置测试运行器Playwright Test 已经集成了测试组织、断言、并行执行、重试和报告功能。例如import{test,expect}fromplaywright/test;test(check page title,async({page}){awaitpage.goto(https://example.com);awaitexpect(page).toHaveTitle(xxxx);});一个测试用例不需要额外搭建独立的断言框架就可以直接运行。3.3 TypeScript 类型支持相比 JavaScriptTypeScript 可以通过静态类型检查提前发现部分错误。例如interfaceTestUser{username:string;password:string;}constuser:TestUser{username:testuser,password:test123};当自动化项目中存在大量测试数据、公共方法和配置时类型定义能够提高代码的可读性和可维护性。当然TypeScript 并不能替代测试断言也不能保证业务逻辑正确。4. 怎么使用 Playwright4.1 创建项目首先确保本地已经安装 Node.js。在终端中执行npminit playwrightlatest按照提示选择TypeScript测试目录例如tests是否添加 GitHub Actions是否安装浏览器初始化后项目通常包含playwright-demo/ ├── tests/ │ └── example.spec.ts ├── playwright.config.ts ├── package.json └── package-lock.json4.2 常用命令执行所有测试npx playwrighttest使用浏览器界面观察测试执行npx playwrighttest--headed打开 Playwright UI Modenpx playwrighttest--ui调试测试这个好用可以时时查看UI执行步骤npx playwrighttest--debug查看 HTML 测试报告npx playwright show-report5. Demo编写第一个 Playwright 测试创建文件tests/demo/bing.spec.tsimport{test,expect}fromplaywright/test;test(Bing Playwright,async({page}){awaitpage.goto(https://www.bing.com/);constsearchpage.locator(#sb_form_q);// 输入关键词awaitsearch.fill(Playwright);// 点击搜索awaitpage.locator(#search_icon).click();// 验证搜索页面 URLawaitexpect(page).toHaveURL(/bing\.com\/search\?.*qPlaywright/i);});执行npx playwrighttesttests/demo/bing.spec.ts如果测试通过终端会显示 Passed 状态。Playwright 测试执行成功HTML 测试报告6. 总结Puppeteer 和 Playwright 都是优秀的浏览器自动化工具。如果主要是浏览器操作、页面截图或者已有 Puppeteer 项目维护继续使用 Puppeteer 完全没有问题。但如果准备新建一套 Web E2E 自动化测试框架我会优先考虑Playwright TypeScript。原因主要有三个Playwright Test 集成了测试运行器、断言和报告。Locator 和自动重试断言可以减少部分不稳定测试。TypeScript 有助于维护测试数据和公共方法。下一篇准备介绍[Playwright] [02]常用命令与调试Debug UI、Mode和 Trace Viewer后续会更新Playwright自动化测试的Demo和实战都有源码。从手写UI自动化到api测试再到ai-testing都有。大家感兴趣可以关注我的Playwright专栏大概会有20篇左右。参考文档Playwrighthttps://playwright.dev/Puppeteerhttps://pptr.dev/TypeScripthttps://www.typescriptlang.org/
企业数字化 ERP 产品动态
相关推荐
IDEA 断点调试技巧:拖拽 如果要在程序员的世界里评选“最让人抓狂的微操”,打错断点绝对能排进前三。
想象一下这个画面:你为了排查一个极其隐蔽的并发 Bug,在 IDEA 的源码里层层剥茧。终于,你锁定了可疑区域,然后在这个区域的核心代码上&… · 2026/11/11 4:35:54
springboot环保生活指南网站23223-计算机毕业设计、课程设计 前言
✨ 博主介绍:一线全栈工程师,毕设实战引路人。技术栈覆盖Java、Python、C#、PHP、Node.js及UniApp跨端开发,擅长多语言项目落地与架构设计。持续分享毕设源码、开题报告、技术选型心得与职场踩坑经验。用工程化思维写代码,帮… · 2026/11/9 2:48:36
springboot固定资产盘点管理系统24354-计算机毕业设计、课程设计 前言
✨ 博主介绍:一线全栈工程师,毕设实战引路人。技术栈覆盖Java、Python、C#、PHP、Node.js及UniApp跨端开发,擅长多语言项目落地与架构设计。持续分享毕设源码、开题报告、技术选型心得与职场踩坑经验。用工程化思维写代码,帮… · 2026/11/9 2:09:54
浙江瑞安低压电工证考前押题怎么找?实操考试心里没底怕挂科 浙江瑞安低压电工证考前押题怎么找?实操考试心里没底怕挂科 实操考试心里没底怕挂科?别慌,考前押题就是你最后的救命稻草。特别是在浙江瑞安地区,低压电工证的考试难度逐年提升,很多考生都在担心自己是否能一次性通过。本文就从你最关心的问题出发,带你… · 2026/11/11 4:35:28
继电保护电工证等级报考条件与通过率揭秘 继电保护电工证等级报考条件与通过率揭秘 你是不是也担心学历不高,根本报不上继电保护电工证?别急,听我这个在南阳公路工程干了8年的老电工跟你唠唠实话,学历真的不是问题,关键是你得搞清楚 继电保护电工证等级 的报考门槛和通过率到底怎么算。… · 2026/11/11 4:35:28
大连考电工证考试多久拿证?实操考试心里没底怕挂科怎么破 大连考电工证考试多久拿证?实操考试心里没底怕挂科怎么破 你是不是正在准备大连考电工证考试,担心实操考试心里没底怕挂科?别急,这篇文章就是为你量身打造的,从备考到拿证,全流程讲透彻,让你轻松应对考试, 多久拿证 不是问题。… · 2026/11/11 4:35:28
电工证需要培训么嘛 考证多少钱一次讲清楚 电工证需要培训么嘛 考证多少钱一次讲清楚 证书过期了不知道怎么复审延期?别慌,先看这里!电工证作为特种作业操作证,是从事电力相关工作的“入场券”,一旦过期或未及时复审,不仅影响工作,还可能面临法律风险。今天我们就来聊聊 电工证需要培训么嘛… · 2026/11/11 4:35:28
电工证考试是谁命题 电子证书如何办理和使用 电工证考试是谁命题 电子证书如何办理和使用 之前考的证在外省能不能转过来?这是很多从业人员在换工作、换城市时最关心的问题之一。如果你正在找一份电工相关的工作,或者正在考虑考取电工证,那么你一定想知道: 电工证考试是谁命题 ,以及 电子证书… · 2026/11/11 4:34:28
电工证丢失还能补吗?千万别踩坑,丢了证等于失业 电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/10 2:16:10
电力电缆作业证直播报名入口与办理流程良心建议 电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/10 17:46:39
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/10 17:11:43
_中职电工证最新政策解读 中职电工证在哪考?工地太忙根本没时间复习考试的救星来了 工地太忙根本没时间复习考试,这是很多正在备考 中职电工证 的建筑工友的真实写照。你不是不想考,而是真的没时间。但别担心,这期内容是 新乡初次报考人员… · 2026/11/11 0:00:52
昆明电工证培训价格值不值得考?老电工告诉你真相 昆明电工证培训价格值不值得考?老电工告诉你真相 之前考的证在外省能不能转过来?这个问题是很多在外地打工、换城市生活、或者是想在昆明发展的朋友最关心的。尤其是现在云南发展快,很多企业都在招持证上岗的电工,如果你手头有证但不在本地,那这个证是不… · 2026/11/11 0:00:52
特种电缆张工网上查询全攻略:外省证如何转过来 特种电缆张工网上查询全攻略:外省证如何转过来 之前考的证在外省能不能转过来?这是很多特种作业从业者最关心的问题,尤其是像特种电缆张工这类证书,直接关系到日常工作是否合规、能否顺利晋升。很多小伙伴因为证书归属地的问题,陷入职业发展的瓶颈,甚至… · 2026/11/11 0:00:52
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 20:19:29
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 19:22:45
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 17:00:47