
Expect的Cookie注入魔法揭秘如何让你的测试模拟真实登录用户【免费下载链接】expectExpect tests your agents code in a real browser项目地址: https://gitcode.com/gh_mirrors/expect6/expect如果你用 AI 编程助手写过网页代码一定遇到过这种尴尬自动化测试一打开页面就被踢回登录页。Expect 的Cookie 注入功能正是为解决这个难题而生——它能把你在本地浏览器里真实登录的会话直接「搬运」到浏览器自动化测试的浏览器中让你的测试像真实登录用户一样访问受保护的页面。为什么浏览器测试很难测「登录态」页面无头浏览器headless browser每次启动都是一个「白纸」环境没有登录过、没有会话、没有身份。所以访问需要鉴权的路由 → 被重定向到登录页调用受保护的 API → 收到 401 Unauthorized测试后台管理界面 → 根本进不去手动在测试脚本里写一遍「填账号、输密码、点登录」既脆弱又慢而且很多网站有验证码、二次验证自动登录根本不现实。Expect 的思路很巧妙别再登录了直接复用你本地浏览器里已经登录好的会话。魔法全貌三步完成 Cookie 注入整条链路可以概括为三步源码分布在三个核心模块步骤做什么所在模块1️⃣ 选浏览器在终端勾选要从哪些浏览器同步 Cookiecookie-sync-confirm-screen.tsx2️⃣ 提取 Cookie从本地浏览器的 Cookie 库中读取并解密packages/cookies/3️⃣ 注入测试浏览器在导航前把 Cookie 塞进 Playwright 上下文browser.ts下面逐一拆解。第一步命令行里勾选浏览器10 秒配置当你带着 URL 启动 Expect 测试时终端会弹出一个 Cookie 同步确认界面列出本机安装的所有浏览器Chrome、Edge、Brave、Firefox、Safari 等 18 种默认浏览器自动预选直接回车就能用支持多选空格勾选/取消、a全选、n全不选状态栏会实时显示cookies (2)之类的提示让你知道同步已开启你的选择会保存到项目偏好中下次运行自动沿用如果不想同步加--no-cookies参数即可完全跳过详见 index.tsx 的选项定义。第二步从本地浏览器「搬」出 Cookie 的两种策略这一步由独立的 packages/cookies 包完成它内置了两套互补的提取策略策略 A直接读磁盘上的 SQLite 数据库快速每个浏览器都把 Cookie 存在本地数据库文件里。Expect 的定位很准定位数据库按平台找到各浏览器的 Cookie 存储路径复制到临时目录避免和你正在使用的浏览器产生锁冲突解密仅 Chromium 系需要macOS从钥匙串取密钥 → PBKDF2-SHA1 → AES-128-CBCLinuxsecret-tool取密钥回退为固定口令WindowsLocal State中的密钥 → DPAPI 解包 → AES-256-GCM解析Chromium 查cookies表、Firefox 的 Cookie 是明文存储在cookies.sqlite、Safari 则解析二进制的Cookies.binarycookies文件各浏览器的具体解析逻辑分别在 chromium.ts、firefox.ts、safari.ts 中实现。策略 B用 CDP 让浏览器自己解密更省事对 Chromium 系浏览器还可以启动一个无头实例、通过 Chrome DevTools Protocol 发送Network.getAllCookies命令——解密工作交给浏览器自己完成完全绕开系统钥匙串弹窗。这个流程由 cdp-client.ts 驱动复制配置 → 移除单实例锁 → 无头启动 → WebSocket 取 Cookie → 清理退出全程不会碰你正在使用的真实配置。两种方式最终都归一化为统一的Cookie结构name、value、domain、path、httpOnly、sameSite…再按名称|域名|路径去重。第三步一行 addCookies测试浏览器「原地登录」提取到的 Cookie 会在打开目标页之前注入 Playwright 浏览器上下文核心只有三行逻辑见 browser.tsconst cookies Array.isArray(options.cookies) ? options.cookies : await extractDefaultBrowserCookies(url, preferredProfile); await context.addCookies(cookies.map((c) c.playwrightFormat));注入后测试浏览器访问任何需要登录的页面都会直接以「已登录」身份进入。为了让 Agent 调用浏览器时不必等待提取MCP 会话在启动时就在后台预提取Cookie见 mcp-session.ts——等页面要打开时Cookie 早已就位。真实效果官方测试验证的 4 个细节Expect 用一套完整的模拟应用验证了注入后的行为见 cookie-injection.test.ts这些细节正是「像真实用户」的关键✅HttpOnly 会话 Cookie 自动隐藏document.cookie里看不到sid与真实浏览器安全行为一致✅路径作用域精确生效admin_panel只在/admin路由被发送公开页面不会带上✅页面内 fetch 自动携带 Cookie测试里的前端 JS 调 API 直接返回已认证数据✅会话可跨浏览器迁移从浏览器 A 提取的 Cookie 注入全新浏览器 BB 立刻具备登录态而没注入的浏览器访问同一页面仍被重定向到登录页正因为登录态开箱即用Agent 才能专注于真正的测试像图中所示它会自动生成「填充邮箱 → 填充密码 → 提交表单 → 验证跳转」这样的测试计划直接跑在真实的登录/受保护页面上。新手快速上手# 1. 全局安装 Expect CLI npm install -g expect-cli # 2. 在项目里运行会提示你选择同步 Cookie 的浏览器 expect -m 测试登录后的仪表板功能 -u http://localhost:3000几个实用小贴士CI 环境用--ci模式会自动跳过 Cookie 提取服务器上本来也没有你的本地浏览器无头运行 30 分钟超时隐私Cookie 只在你的机器上读取和注入整个流程本地完成临时关闭--no-cookies一键回到「匿名访客」模式方便专门测试未登录路径总结Expect 的 Cookie 注入把浏览器测试中最头疼的「登录态」问题化成了 10 秒钟的选择勾选浏览器 → 自动提取解密 → 注入测试浏览器。从此你的 AI 编程助手测试代码时就是那个已经登录好、有完整会话的「真实用户」——受保护页面、后台管理、个性化 API全都测得动 【免费下载链接】expectExpect tests your agents code in a real browser项目地址: https://gitcode.com/gh_mirrors/expect6/expect创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考