Playwright 测试Skills 最佳实践
📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)
📝 职场经验干货:
只要我发自动化、CI 相关的内容,后台总有人留言同一件事。
不是用例写错了,是整条 pipeline 又慢又红。
改个前端 class,E2E 挂一片;CI 上偶发失败,本地却死活复现不了;还有人一上来就 waitForTimeout(3000),跑得慢还觉得自己很稳。
说句可能有点直白的话:
多半不是 Playwright 不行,是你没守住「可维护、可重试、少等待」这几条线。
抽十几分钟,按下面「黄金法则 → 怎么落地 → 踩坑」走一遍,你的 CI/CD 真的有机会又快又稳。

一、Playwright 黄金法则:8 条,条条对应真实案例
1. 选择器:别跟 class 绑在一起
问题长啥样:
CSS、XPath 死死绑在 DOM 细节上,前端一改版,你连夜改用例。
为啥会这样:
选择器跟实现耦合,结构一变就失效。
咋整:
用「用户视角」定位,改版耐扛一点。
- 推荐:getByRole()、getByText()、getByLabel()
- 尽量别:locator('#id')、locator('.class')(除非真没辙)
2. 硬等待:pipeline 的减速带
问题长啥样:page.waitForTimeout(3000)——等短了偶发挂,等长了全组陪你等。
咋整:
用「条件满足」替代固定秒数,交给 Playwright 自动重试。
- 推荐:expect(locator).toBeVisible()、toBeEnabled()、page.waitForURL()
- 能不用就不用:page.waitForTimeout()
3. Web-first 断言:页面慢一点,别立刻判死刑
问题长啥样:expect(await locator.textContent()).toBe('xxx') 只判一次,网络抖一下你就误报。
咋整:
用自带重试的断言。
- 推荐:expect(locator).toHaveText('xxx')、toBeVisible()
- 别: 先 await 取值再 expect
4. 测试隔离:CI 可是会乱序、会并行的
问题长啥样:
用例共享状态、依赖执行顺序,本地串行全绿,CI 单跑一条就挂。
咋整:
- 不共享 page/context 以外的「可变全局状态」
- 用 test.extend() 或 fixture 共享「怎么创建」,别共享「同一个实例」
- 标准: 任意一条单独跑都能过,不依赖先后顺序
5. baseURL:换环境别改代码
问题长啥样:
写死 page.goto('https://xxx.com/login'),本地、预发、CI 切环境就改代码改到吐。
咋整:playwright.config.ts 里配好 use.baseURL,用例里只写 page.goto('/login')。
换环境?改配置或环境变量就行。
6. 重试 + trace:线上要体面,排障要留痕
问题长啥样:
CI 偶发红,整轮重跑心累;没有 trace,对着日志猜到天亮。
咋整:
- CI:retries: process.env.CI ? 2 : 0(线上宽容一点)
- 本地:retries: 0(改用例要快)
- trace:trace: 'on-first-retry'——只在首次重试时抓,不拖慢平时 pipeline
7. Fixture 优先:全局变量是并行时的雷
问题长啥样:
模块顶层的 page、登录态,用例耦合,一并行就互相踩。
咋整:test.extend() 封装「已登录的 page」「带 baseURL 的 context」。
千万不要在文件顶层挂可变 page/context。
8. 单一职责 + mock 边界
- 每个用例只验证一种核心行为(多个 expect 可以,但主线要清晰)
- 只 mock 外部依赖(第三方 API、支付、邮件),别 mock 自家业务代码糊弄自己
二、从零落地:安装 → 配置 → 第一条用例
大概 5~10 分钟,你能跑通一条「能进 CI」的用例。
下面命令建议你直接复制,别去搜那种三年前的博客,坑不一样。
第一步:项目与依赖
前提:Node.js 16+(低了会各种怪报错)。
mkdir mytest && cd mytest
npm init -y
# 安装
npm install -D @playwright/test
# 首次安装浏览器驱动(关键!否则会报错)
npx playwright install
# Windows 系统额外安装依赖(可选)
npx playwright install-deps



安装浏览器驱动这样就可以在trae中使用playwright-skill了
第二步:浏览器驱动
只装 npm 包 不等于 装好浏览器。CI 镜像里也一样。
# 新手省事:全装
npx playwright install
# 想省时间:只装 Chromium
npx playwright install chromium

Windows 若缺系统依赖,可按官方文档执行 npx playwright install-deps(视情况)。
验证是否 OK:
npx playwright test
第三步:用 Skill 加速写用例
你可以直接让 Playwright Skill 根据页面或需求生成测试脚本,在 Chrome 里跑通,再看 HTML 报告——和「8 条法则」不冲突:生成完再按法则收一遍选择器、断言和等待,CI 才稳。


在谷歌浏览器执行测试用例


最后查看测试报告

三、高频踩坑:对照改,改完会感谢我
3.1 断言
- expect(await page.locator('.title').textContent()).toBe('欢迎') —— 无重试
- await expect(page.locator('.title')).toHaveText('欢迎') —— 自带重试
3.2 等待
- await page.waitForTimeout(2000) 再点
- await expect(locator).toBeVisible() 再操作
3.3 浏览器 / 设备
- 移动端:test.use({ ...devices['iPhone 14'] })
- 多浏览器:在 projects 里加 Firefox、WebKit
3.4 「装完包就跑」——CI 里最常见翻车
现象: 报错找不到 chromium / firefox / webkit 可执行文件。
原因: 只 npm install 了,没拉浏览器二进制。
办法: Pipeline 里显式执行 npx playwright install chromium(或全量 install + 按需 install-deps)。
这条和「Skill 好不好用」无关,是 Playwright 的硬门槛。
四、Playwright 还能干啥(别只当点点点工具)
除了 E2E,你还可以:
- API 测试:request 上下文直接打接口,和页面流组合
- 视觉回归:expect(page).toHaveScreenshot()
- 跨端: Chromium / Firefox / WebKit + 移动端模拟
能力越大,越要记得:稳定来自规范,快来自少等、可并行。
写在最后
我写这篇,是因为自己也经历过「CI 通过率低、全员等重跑」那种两眼一黑。
Playwright 本身很能打,快和稳都是可以配出来的。
选择器像用户一样想,断言像有耐心一样等,环境像配置一样切。
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)