📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)

📝 职场经验干货:

软件测试工程师简历上如何编写个人信息(一周8个面试)

软件测试工程师简历上如何编写专业技能(一周8个面试)

软件测试工程师简历上如何编写项目经验(一周8个面试)

软件测试工程师简历上如何编写个人荣誉(一周8个面试)

软件测试行情分享(这些都不了解就别贸然冲了.)

软件测试面试重点,搞清楚这些轻松拿到年薪30W+

软件测试面试刷题小程序免费使用(永久使用)


只要我发自动化、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%免费】

​​​

​​

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐