一、背景
前段时间看到一个问题:
"Playwright的执行步骤了解吗?有没有看过源码?"
我当时是蒙的。
因为前面我写Playwright脚本,基本是让AI生成,能跑就行,还没怎么研究它背后在做什么。
所有需要补这块,从头拆一遍。
二、第一个问题就卡住了
我跟AI聊,它问我:
"launch启动浏览器,站在测试角度你会关注哪些点?"
我想了半天,只想到一个:
有没有安装浏览器。
其他的,一片空白。
它接着问:
启动不成功还有什么原因?启动之后数据流是怎么走的?连接建立失败怎么办?
我意识到,我对这一步的理解停在表面------只知道launch是"启动浏览器",但不知道它启动的过程里有哪些环节可能出问题。
三、重新拆执行链
这次不再从 API 去记,而是统一用一个方法来拆:
输入 → 执行链 → 输出 → 失败点 → 定位方式
目标是:
把黑盒操作,变成可分析的过程
把整个执行过程拆一遍。
最小执行链就三步:
launch() → goto() → click()
对应:启动浏览器 → 加载页面 → 操作页面
但每一步背后,都有自己的执行过程和失败点。
1. launch(启动浏览器)
本质
启动一个浏览器进程,并建立控制连接
执行链
找到浏览器 → 启动进程 → 建立连接
常见问题
- 浏览器未安装
- 启动失败(权限/资源问题)
- 启动成功但无法控制
2. goto(加载页面)
本质
让浏览器访问一个 URL,并等待页面加载
执行链
发起请求 → 页面加载 → 达到加载状态
常见问题
- URL 错误
- 网络问题
- 页面返回异常(404 / 500)
- 加载超时
3. click(操作页面)
本质
不是简单点击,而是一段执行流程
执行链
定位元素 → 等待可操作 → 滚动到可见区域 → 执行点击
常见问题
- 元素不存在
- 元素被遮挡 / 不可点击
- 页面未加载完成
- 点击成功但业务无响应
四、一个关键点:自动等待机制
在使用 Playwright 时,明显感觉到:
不需要频繁写 sleep
原因:
Playwright 内部会自动等待:
- 元素出现
- 元素可见
- 元素可操作
但如果一直不满足条件:
会触发超时,而不是无限等待
五、拆完之后,思维方式变了
以前写自动化:
写脚本 → 失败 → 改代码
现在会变成:
失败
↓
在哪一层(launch / goto / click)
↓
执行链哪一步断了
↓
针对性定位
六、小结
这次最大的收获不是学会 Playwright API,而是:
👉 用测试视角去拆执行链
核心一句话:
自动化测试的关键,不是会写脚本,而是能把执行过程拆清楚、问题定位清楚。
七、后续继续梳理:
-
自动等待机制的细节
-
元素定位策略怎么选
-
失败怎么分类、怎么设计回归