首页/新闻资讯/正文详情

Expect的Cookie注入魔法揭秘:如何让你的测试模拟真实登录用户

发布时间:2026/9/26 13:48:34 来源:云帆数科 栏目:资讯中心
Expect的Cookie注入魔法揭秘:如何让你的测试模拟真实登录用户
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),仅供参考

相关推荐

SX126x LoRa驱动移植实战:从STM32初始化到CAD低功耗收包
SX126x LoRa驱动移植实战:从STM32初始化到CAD低功耗收包

简介:面向STM32平台的SX126x系列LoRa芯片驱动源码包,适配SX1261、SX1262、SX1268等新一代LoRa芯片,涵盖芯片初始化、数据收发、错误处理、状态管理等完整驱动模块,适合有一定嵌入式基础、正在评估或部署该系列芯片的开发者。压缩包… · 2026/9/26 13:48:34

阿里下场造车:V17如何以智能座舱和云计算重构汽车生态?
阿里下场造车:V17如何以智能座舱和云计算重构汽车生态?

1. 阿里这次为什么亲自下场?“V17”到底是个什么样的项目 1.1 从“卖水人”到“下场造船”:阿里造车路线的转折 在汽车圈和科技圈,阿里对汽车的兴趣从来不是秘密。过去十几年,它沿着两条线在推进:一条是资本线&#x… · 2026/9/26 13:48:28

HarmonyOS zIndex层叠顺序使用指南:从原理到实践避坑
HarmonyOS zIndex层叠顺序使用指南:从原理到实践避坑

HarmonyOS6 zIndex 层叠顺序属性使用指南 你要做卡片叠卡片的效果,第一反应往往是调 zIndex ,结果发现有的场景生效、有的场景完全不理会你设置的数值。这种情况我在 HarmonyOS 开发里遇到过太多次,团队里新同学也经常拿着 zIndex 的文档问… · 2026/9/26 13:48:22

新版Outlook收不到邮件?强制刷新收件箱与同步排查指南
新版Outlook收不到邮件?强制刷新收件箱与同步排查指南

1. 新版Outlook收不到邮件到底卡在哪新版Outlook(也就是 Windows 上那个带“试用新版 Outlook”开关切换过去的版本)从上线到现在,我身边至少有一半的同事都遇到过同一个问题:明明手机上的邮箱客户端已经弹出新邮件提醒了&#xf… · 2026/9/26 14:28:56

Kimi金融行业AI方案拆解:从能聊天到能干活的大模型落地关键一步
Kimi金融行业AI方案拆解:从能聊天到能干活的大模型落地关键一步

先说结论:Kimi这次发布的金融行业AI解决方案,本质上是把大模型从“能聊天”推向“能干活”的关键一步。做金融科技、企业数字化、算法应用的朋友应该都感受到了,过去两年大模型在金融圈更多是演示性质,真正落到业务流程里、能扛住… · 2026/9/26 14:28:50

微信开源企业级AI知识库:架构、自动Wiki与部署实践
微信开源企业级AI知识库:架构、自动Wiki与部署实践

1. 微信开源企业级AI知识库,我从热闹里看到了什么真东西消息刚传出来的时候,我的工作群和朋友圈直接炸了。微信开源自家企业级AI知识库,这几个词放在一起,本身就够让人浮想联翩:AI、知识库、开源、Wiki,每一… · 2026/9/26 14:28:50

STM32系统稳定性根因:电学三要素与硬件-软件耦合解析
STM32系统稳定性根因:电学三要素与硬件-软件耦合解析

1. 这不是“电学知识STM32”的简单拼凑,而是一套可落地的嵌入式系统认知框架你搜“电学知识之STM32系统”,大概率是刚买了一块STM32F103C8T6最小系统板,拆开包装发现:板子上密密麻麻的电阻电容、一个晶振、几颗LED、几个按键&… · 2026/9/26 14:28:50

AI MAX 395统一内存推理优化:halogen-flash-server部署实战
AI MAX 395统一内存推理优化:halogen-flash-server部署实战

前阵子AMD AI MAX 395的终端陆续到手之后,大家干得最多的一件事就是跑模型图一乐。跑是跑起来了,可真把它当成一台对外服务的推理机器来用,体验完全不是一回事。halogen-flash-server这个项目,前期就是针对这台硬件做了大量优化&a… · 2026/9/26 14:28:43

Claude Code 模板库实战:用提示词工程固化团队开发规范
Claude Code 模板库实战:用提示词工程固化团队开发规范

1. 这套模板库到底在解决什么问题1.1 我为什么开始收集 Claude Code 模板先说背景。我大概在 Claude Code 刚开放命令行版本时就开始用了,一开始对它最大的感受是:很强,但也很“飘”。它不像传统 IDE 里的插件那样有明确的配置面板&#xff0… · 2026/9/26 14:28:43

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码