Playwright 1.63 支持持久化 OPFS:隔离代理区域测试状态
Microsoft 于 2026 年 9 月 4 日发布 Playwright 1.63。浏览器上下文的 storageState() API 新增可选的 opfs 参数,可把源私有文件系统纳入存储状态快照,并恢复到后续浏览器上下文。

当获准测试依赖网站写入 OPFS 的文件时,这项能力很实用;但它也扩大了代理测试能够跨运行携带的本地状态。如果同一快照被不同国家、账号或实验组复用,看似由地理位置导致的结果,实际上可能来自上一次恢复的本地文件。
公开资料说明:Microsoft Playwright《Playwright v1.63.0》,发布于 2026 年 9 月 4 日;Microsoft Playwright《BrowserContext API reference》,查阅于 2026 年 9 月 10 日。
1.63 具体改变了什么
Playwright 的存储状态原本就能保存 Cookie 和 local storage,并可选择包含 IndexedDB 与虚拟 WebAuthn 凭据。1.63 又加入 OPFS:
await context.storageState({
path: statePath,
opfs: true
});
官方 API 说明指出,opfs: true 会把源私有文件系统放入快照;临时 WebKit 上下文目前不支持 OPFS。
这个参数是显式启用的,并不会因为保存存储状态就自动开启。但升级审查仍然必要:公共 helper 或框架封装可能集中启用它,而单个测试文件中看不到该选项。
为什么代理测试会被状态污染
代理改变网络路径以及可能呈现的出口地区,却不会自动清理浏览器本地状态。恢复的 OPFS 属于具体源,应用可能把其中的文件与 Cookie、IndexedDB、local storage、服务端账号状态及网络信号共同使用。
例如,一个合规本地化测试可能这样失真:美国运行把市场目录写入 OPFS;测试保存包含 OPFS 的状态;欧洲运行恢复同一文件;应用优先读取旧内容;最终测试错误地认为欧洲代理收到了美国页面。代理可能完全正常,问题在于浏览器实验组并不干净。
反过来,如果复现业务确实需要 OPFS,而工具静默遗漏它,Cookie 和 local storage 虽然恢复了,流程仍可能失败。
列出每一层状态
不要把 storageState.json 当成单一“登录文件”。分别记录 Cookie、local storage、IndexedDB、OPFS、虚拟凭据和服务端账号状态,并写明包含理由、敏感级别和保存期限。
包含凭据或业务数据的快照不能提交到源码仓库、打印到 CI 日志,也不能在未经批准的实验组之间复用。
建立干净与恢复状态矩阵
升级测试需要把线路和状态分开。每个目标地区至少执行:
- 全新上下文的直连对照;
- 全新上下文通过区域代理;
- 仅恢复 Cookie;
- 必要时恢复 Cookie 与 IndexedDB;
- 明确需要时再加入 OPFS;
- 同地区创建并在同地区恢复;
- 跨地区恢复作为负向测试;
- 分别测试新账号与既有账号。
固定浏览器版本、目标 URL、代理线路、视口、语言、时区、请求头和测试数据,每次只改变一个状态维度。涉及货币、税费和供应范围时,可结合区域代理本地价格验证指南。
用实验组命名状态,而不是用方便的文件名
避免使用通用的 auth.json。按允许共享的维度组织:
state/<环境>/<账号类别>/<市场>/<实验>/<浏览器>.json
路径本身不要包含密码或个人标识。受保护的清单应记录状态 ID、创建与过期时间、环境、浏览器版本、允许源、市场实验组、账号类别、实验 ID、包含的状态类型及文件摘要。任务请求与清单不一致时直接拒绝运行。
证明 OPFS 是否改变结果
在自有或已获授权的源上,通过应用正常行为写入无害 canary 文件。分别保存包含和不包含 OPFS 的快照,恢复到新上下文,再断言 canary 是否存在。
真实业务测试应比较最终 URL、重定向链、响应状态、内容摘要、应用显示的市场与币种、代理出口地区、OPFS canary、服务端账号状态,以及脱敏后的截图或 trace。
不得查看或提取其他用户数据。测试目标是验证自身状态边界,不是探索目标系统的内部文件。
把恢复文件当作不可信输入
OPFS 快照可能比创建它的会话存活更久,因此应加密存储与传输、按环境和实验组控制访问、恢复前验证完整性、设置短有效期、隔离生产与低环境数据、排除客户数据,并在凭据变更后轮换。
不要让多个并行 worker 共同写一个状态文件。每个 worker 应使用不可变输入或独立副本,避免一个测试改变另一个测试的前提。
明确浏览器能力边界
API 文档明确说明临时 WebKit 上下文目前不支持 OPFS。不要静默跳过断言,应把组合标记为不支持、改用不同测试设计,或只在受支持浏览器上运行依赖 OPFS 的流程。
主测试前先执行能力探针,并把结果与浏览器版本一起保存,不能假设不同引擎会以完全相同方式序列化应用状态。
升级发布步骤
- 盘点所有调用或恢复
storageState()的 helper。 - 在 canary 环境固定 Playwright 1.63 与浏览器版本。
- 检查清单是否意外包含 OPFS。
- 在受控源执行干净与恢复矩阵。
- 验证实验组键能够阻止跨地区、跨账号复用。
- 明确测试临时 WebKit 的限制。
- 检查 CI 日志、trace 与上传附件是否泄露状态。
- 为状态错配、陈旧内容和附件泄露设置失败门槛。
- 每次只扩展一个地区或业务。
- 保留旧版本和旧状态格式的回滚路径。
网络层验证可配合代理响应新鲜度指南,避免把恢复的本地文件误判为新的区域响应。
检查清单
- [ ] OPFS 是有意启用且已有文档。
- [ ] 每种存储状态都有负责人和保留期。
- [ ] 文件按环境、账号、市场和实验分组。
- [ ] 工具拒绝跨实验组恢复。
- [ ] 干净上下文与恢复上下文分别测试。
- [ ] 使用获准的 canary 证明 OPFS 是否恢复。
- [ ] 代理地区与浏览器状态独立验证。
- [ ] 内容新鲜度和市场判断使用多个信号。
- [ ] 临时 WebKit 限制已明确标记。
- [ ] 附件已加密、受控且排除在源码库之外。
- [ ] 并行 worker 无法修改共享状态。
- [ ] 已记录回滚路径。
常见问题
Playwright 1.63 会在所有存储状态中自动包含 OPFS 吗?
不会,opfs 是可选参数。但公共 helper 可能集中启用,升级时仍需审查。
更换代理地区会清除 OPFS 吗?
不会。代理控制网络路由,本地状态必须由测试工具明确隔离或恢复。
OPFS 会包含认证信息吗?
取决于应用。未完成分类前应把快照视为敏感数据,不能因为它不是 Cookie 就假设安全。
合规说明
只在获准的系统和账号上使用代理与浏览器自动化。不得利用存储状态绕过认证、同意流程、地域控制、速率限制、购买限制或反欺诈系统。最小化个人数据,保护保存的凭据与文件,遵守目标条款和隐私法规,并在批准用途结束后删除测试附件。