用途
在浏览器自动化工作开始前,加载已保存的 Playwright storageState 认证配置文件,从而不必在每个浏览器会话开始时手动登录。
生效条件
需要同时满足以下条件时该技能才适用:
- 当前项目存在 .playwright/profiles.json 文件
- 即将开始浏览器自动化工作(通过 Bash 使用 Playwright CLI)
- 目标页面需要认证
配置文件发现
在项目根目录检查 .playwright/profiles.json,读取它以发现可用配置文件。文件内容形如:
{ "profiles": { "admin": { "loginUrl": "https://example.com/login", "description": "Full permissions", "createdAt": "2026-03-31T12:00:00Z" } } }
每个配置文件对应一个 storageState 文件,位于 .playwright/profiles/<role-name>.json。
配置文件选择
根据对话上下文确定使用哪个配置文件:
- 用户提到具体角色(如“test the admin dashboard”“check the speaker view”)时,匹配配置中的配置文件名。
- 用户未指定角色且只存在一个配置文件时,自动使用它。
- 用户未指定角色且存在多个配置文件时,询问使用哪一个,并列出可用配置文件及其描述。
加载配置文件
在导航到任何需要认证的页面之前,通过 Bash 工具使用 playwright-cli 加载配置文件。其中 {session} 占位符指当前命名会话(如 runner-desktop、qa-ux——由调用方技能或命令设置)。
先验证 storageState 文件存在于 .playwright/profiles/<role-name>.json。若不存在,告知用户并建议运行 /setup-profiles 创建它。
将配置文件的 cookies 和 localStorage 载入浏览器会话:
playwright-cli -s={session} state-load ".playwright/profiles/<role-name>.json"
这会恢复 storageState JSON 中的所有 cookies 和各源的 localStorage——格式与 Playwright 的 storageState() 相同。
如果配置文件 JSON 包含 sessionStorage 字段(不属于标准 storageState——由 /setup-profiles 添加),需在导航到目标源后单独恢复:
playwright-cli -s={session} goto "<origin>"
然后对每个 sessionStorage 条目:
playwright-cli -s={session} sessionstorage-set "<name>" "<value>"
再导航到目标认证页面。此时 cookies 随请求发送、localStorage 已填充、sessionStorage 已恢复,服务端、客户端以及 SPA 认证库(Supabase、Firebase、Auth0)都能识别该会话。
测试数据文件与验收条件
加载配置文件后,检查 profiles.json 中该配置是否含有 files 数组和/或 acceptance 对象。这些字段是可选的——许多配置不会有。
展示可用文件
如果配置有 files,向调用方展示摘要,例如:
该配置有 N 个测试数据文件可用:
- valid-deck.pptx — 干净的演示文稿,通过所有检查
- profanity-deck.pptx — 备注含脏话,应被标记
- (cloud) oversized-deck.pptx — 200MB 演示文稿,测试大小限制
配置验收条件:上传被接受、处理完成
对云端托管文件(有 url 而非 path)标注 (cloud)。此信息仅展示,本技能不据此执行操作——由使用方(工作流生成器、运行器、代理)决定是否及如何使用。
文件路径校验
对每个含 path 字段的文件条目,验证文件是否存在于项目根目录下的给定路径。若文件缺失则警告:
配置 "speaker" 引用的测试文件 "test-fixtures/valid-deck.pptx" 不存在。该文件可能已被移动或删除。
不要因文件缺失而失败或阻断——仅警告。含 url 的文件不校验(它们可能需要认证或位于私有网络)。
验收条件摘要
若配置有 acceptance,包含配置条件的可读摘要。字段映射如下: uploadAccepted: true → upload accepted processingCompletes: true → processing completes resultDownloadable: true → result downloadable errorExpected: true → error expected expectedStatus: "clear" → expected status: "clear"
若个别文件有验收覆盖,注明哪些文件覆盖了配置默认值:
文件 "corrupted.pptx" 覆盖配置验收:upload rejected、error expected
会话过期检测
加载配置并导航到目标页面后,按顺序使用以下启发式判断会话是否仍有效:
- URL 跳转:若浏览器被重定向到匹配配置 loginUrl 的 URL,会话可能已过期。检查快照输出中 Page URL 行的 URL。
- 认证提供方跳转:若最终 URL 在不同域(如 accounts.google.com、auth0.com),应用跳转到了 OAuth 提供方——会话已过期。
- 页面内容检查:通过 Bash 运行 playwright-cli -s={session} snapshot,查找登录相关元素:登录表单、“Log in”/“Sign in”按钮,或“session expired”文本。若目标页面本应显示认证内容却显示登录界面,会话已过期。
若检测到过期:
- 告知用户该配置的会话似乎已过期
- 建议运行 /setup-profiles 刷新
- 不要尝试自动登录
这些启发式为尽力而为。用户始终可以手动运行 /setup-profiles 刷新任意配置。
配置文件缺失
若 .playwright/profiles.json 存在但引用的配置对应 storageState 文件缺失(如全新克隆后),告知用户:
"此项目配置了 Playwright 配置文件,但认证状态文件缺失(它们被 gitignore,需在本地创建)。运行 /setup-profiles 进行认证。"
无配置
若 .playwright/profiles.json 不存在,该技能不适用。除非用户明确询问认证浏览器自动化,否则不要建议创建配置。