更新日志
完整更新日志请参考:Midscene Releases
V0.30 - 🎯 缓存管理升级与移动端体验优化
🎯 更灵活的缓存策略
v0.30 版本改进了缓存系统,让你可以根据实际需求控制缓存行为:
- 多种缓存模式可选: 支持只读(read-only)、只写(write-only)、读写(read-write)等策略。例如在 CI 环境中使用只读模式复用缓存,在本地开发时使用只写模式更新缓存
- 自动清理无用缓存: Agent 销毁时可自动清理未使用的缓存记录,避免缓存文件越积越多
- 配置更简洁统一: CLI 和 Agent 的缓存配置参数已统一,无需记忆不同的配置方式
📊 报告管理更便捷
- 支持合并多个报告: 除了 playwright 场景,现在任意场景均支持将多次自动化执行的报告合并为单个文件,方便集中查看和分享测试结果
📱 移动端自动化优化
iOS 平台改进
- 真机支持改进: 移除了 simctl 检查限制,iOS 真机设备的自动化更流畅
- 自动适配设备显示: 实现设备像素比自动检测,确保在不同 iOS 设备上元素定位准确
Android 平台增强
- 灵活的截图优化: 新增
screenshotResizeRatio 选项,你可以在保证视觉识别准确性的前提下自定义截图尺寸,减少网络传输和存储开销
- 屏幕信息缓存控制: 通过
alwaysRefreshScreenInfo 选项控制是否每次都获取屏幕信息,在稳定环境下可复用缓存提升性能
- 直接执行 ADB 命令: AndroidAgent 新增
runAdbCommand 方法,方便执行自定义的设备控制命令
跨平台一致性
- ClearInput 全平台支持: 解决 AI 无法准确规划各平台清空输入的操作问题
🔧 功能增强
- 失败分类: CLI 执行结果现在可以区分「跳过的失败」和「真正的失败」,帮助定位问题原因
- aiInput 追加输入: 新增
append 选项,在保留现有内容的基础上追加输入,适用于编辑场景
- Chrome 扩展改进:
- 弹窗模式偏好会保存到 localStorage,下次打开记住你的选择
- Bridge 模式支持自动连接,减少手动操作
- 支持 GPT-4o 和非视觉语言模型
🛡️ 类型安全改进
- Zod 模式验证: 为 action 参数引入类型检查,在开发阶段发现参数错误,避免运行时问题
- 数字类型支持: 修复了
aiInput 对 number 类型值的支持,类型处理更健壮
🐞 问题修复
- 修复了 Playwright 循环依赖导致的潜在问题
- 修复了
aiWaitFor 作为首个语句时无法生成报告的问题
- 改进视频录制器延迟逻辑,确保最后的画面帧也能被捕获
- 优化报告展示逻辑,现在可以同时查看错误信息和元素定位信息
- 修复了
aiAction 子任务中 cacheable 选项未正确传递的问题
📚 社区
v0.29 - 📱 新增 iOS 平台支持
🚀 新增 iOS 平台支持
v0.29 版本最大的亮点是正式引入了对 iOS 平台的支持!现在,你可以通过 WebDriver 连接并自动化 iOS 设备,将 Midscene 的强大 AI 自动化能力扩展到苹果生态系统,了解详情: 支持 iOS 自动化
🚅 适配 Qwen3-VL 模型
我们适配了最新的通义千问 Qwen3-VL 模型,开发者可以体验到更快的、更准确的视觉理解能力。详见 选 择 AI 模型
🤖 AI 核心能力增强
- 优化 UI-TARS 模型下的表现:优化 aiAction 规划,改进对话历史管理,提供了更好的上下文感知能力
- 优化 AI 断言与动作:我们更新了
aiAssert 的提示词(Prompt)并优化了 aiAction 的内部实现,使 AI 驱动的断言和动作执行更加精准可靠
📊 报告与调试体验优化
- URL 参数控制回放:为了改善调试体验,现在可以通过 URL 参数直接控制报告回放的默认行为
📚 文档
- 更新了文档部署的缓存策略,确保用户能够及时访问到最新的文档内容
v0.28 - 📱 扩展界面操作能力,构建你自己的 GUI 自动化 Agent(预览特性)
🚀 支持与任意界面集成(预览特性)
v0.28 版本推出了与任意界面集成的功能。定义符合 AbstractInterface 定义的界面控制器类,即可获得一个功能齐全的 Midscene Agent。
该功能的典型用途是构建一个针对 你自己界面的 GUI 自动化 Agent,比如 IoT 设备、内部应用、车载显示器等!
配合通用 Playground 架构和 SDK 增强功能,开发者能方便地调试自定义设备。
更多请参考 与任意界面集成(预览特性)
📱 Android 平台优化
- 规划缓存支持:为 Android 平台添加了规划缓存功能,提升执行效率
- 输入策略增强:基于 IME 设置优化了输入清除策略,提升 Android 平台的输入体验
- 滚动计算改进:优化了 Android 平台的滚动终点计算算法
👆 手势操作扩展
- 双击操作支持:新增双击动作支持
- 长按与滑动手势:新增长按和滑动手势支持
⚙️ 核心功能增强
- Agent 配置隔离:实现了不同 agent 间的模型配置隔离,避免配置冲突
- 在运行时设置环境变量:为 Agent 新增 useCache 和 replanningCycleLimit 配置选项,提供更精细的控制
- YAML 脚本支持:支持通过 YAML 脚本运行通用的自定义设备,提升自动化能力
🐞 问题修复
- 修复了 Qwen 模型的搜索区域大小问题
- 优化了 deepThink 参数处 理和矩形尺寸计算
- 解决了 Playwright 双击操作的相关问题
- 改进了 TEXT 动作类型的处理逻辑
📚 文档与社区
v0.27 - 🧠 核心模块重构,断言与报告功能全面升级
⚠️ 核心模块重构
在 v0.26 引入 Rslib 提升开发体验、降低贡献门槛的基础上,v0.27 更进一步,对核心模块进行了大规模重构。这使得扩展新设备、添加新 AI 操作的成本变得极低,我们诚挚地欢迎社区开发者踊跃贡献!
由于本次重构涉及面较广,升级后如遇到任何问题,请随时向我们反馈,我们将第一时间跟进处理。
🌐 接口优化
aiAssert 功能全面增强
- 新增
name 字段,允许为不同的断言任务命名,方便在 JSON 格式的输出结果中进行识别和解析
- 新增
domIncluded 和 screenshotIncluded 选项,可在断言中灵活控制是否向 AI 发送 DOM 快照和页面截图
🤖 Chrome 扩展 Playground 升级
- 所有 Agent API 都能在 Playground 上直接调试和运行!交互、提取、验证三大类方法全覆盖,可视化操作和验证,让你的自动化开发效率飙升
📊 报告功能优化
- 新增标记浮层开关:报告播放器增加了隐藏标记浮层的开关,方便用户在回放时查看无遮挡的原始页面视图
🐞 问题修复
- 修复了
aiWaitFor 在偶现错误导致报告未生成问题
- 降低 Playwright 插件的内存消耗
v0.26 - 🚀 工具链全面接入 Rslib,大幅提高开发体验、降低贡献门槛
🌐 Web 集成优化
📱 Android 自动化增强
📊 报告功能优化
- 报告内容引入懒解析,解决大体积报告的崩溃问题
- 报告播放器新增自动缩放开关,方便查看全局视角的回放
- 支持 aiAssert / aiQuery 等任务在报告中播放,以完整展示整个页面变动过程
- 修复断言失败时的侧栏状态未显示为失败图标的问题
- 修复报告中下拉筛选器不能切换筛选的问题
🚀 构建与工程化
- 构建工具迁移至 Rslib 库开发工具,提升构建效率和开发体验
- 全仓库开启源码跳转,方便开发者查看源码
- MCP npm 包产物体积优化,从 56M 减少到 30M,大幅提高加载速度
🐞 问题修复
- CLI 在 keepWindow 为 true 时将自动开启 headed 模式
- 修复 getGlobalConfig 的实现问题,解决环境变量初始化异常问题
- 确保 base64 编码中的 mime-type 正确
- 修复 aiAssert 任务返回值类型
v0.25 - 🚀 支持使用图像作为 AI prompt 输入
🎯 核心功能增强
- 新增运行环境,支持运行在 Worker 环境
- 支持使用图像作为 AI prompt 输入,详见 使用图片作为提示词
- 图像处理升级,采用 Photon & Sharp 进行高效图片裁剪
🌐 Web 集成优化
- 通过坐标获取 XPath,提高缓存可复现性
- 缓存文件将 plan 模块提到最前面,增加可读性
- Chrome Recorder 支持导出所有事件到 markdown 文档
- agent 支持指定 HTML 报告名称,详见 reportFileName
📱 Android 自动化增强
🐞 问题修复
- 使用全局配置处理环境变量,避免因多打包导致环境无法覆盖的问题
- 当错误对象序列化失败时,手动构造错误信息
- 修复 playwright 报告类型依赖声明顺序问 题
- 修复 MCP 打包问题
📚 文档 AI 友好
- LLMs.txt 区分中文与英文,方便 AI 理解
- 每篇文档顶部新增按钮,支持复制为 markdown,方便喂给 AI 使用
🤖 其它功能增强
- Chrome Recorder 支持 aiScroll 功能
- 重构 aiAssert 使其与 aiBoolean 实现一致
v0.24 - 🤖 Android 自动化支持 MCP 调用
🚀 Android 自动化支持 MCP 调用
- Android 自动化已全面支持 MCP 调用,为 Android 开发者提供更完善的自动化工具集。详情请参考:MCP 服务
🌐 优化输入清空机制
- 针对 Mac 平台的 Puppeteer 增加了双重输入清空机制,保证输入之前清空输入框
🔧 开发体验
- 简化本地构建
htmlElement.js 的方式,避免循环依赖导致的报告模板构建问题
- 优化了开发工作流,只需要执行
npm run dev 即 可进入 Midscene 工程开发
v0.23 - 📊 全新报告样式与 YAML 脚本能力增强
🎨 报告系统升级
全新报告样式
- 重新设计的测试报告界面,提供更清晰、更美观的测试结果展示
- 优化报告布局和视觉效果,提升用户阅读体验
- 增强报告的可读性和信息层次结构

⚙️ YAML 脚本能力增强
支持多 YAML 文件批量执行
- 新增配置模式,支持配置 Yaml 文件运行顺序、浏览器复用策略、并行度
- 支持获取 JSON 格式的运行结果

🧪 测试覆盖提升
Android 测试增强
- 新增 Android 平台相关测试用例,提升代码质量和稳定性
- 完善测试覆盖率,确保 Android 功能的可靠性
v0.22 - 🎬 Chrome 扩展录制功能上线
🌐 Web集成增强
1️⃣ 全新的录制功能
- Chrome 扩展新增录制功能,可以记录用户在页面上的操作并生成自动化脚本
- 支持录制点击、输入、滚动等常见操作,大大降低自动化脚本编写门槛
- 录制的操作可以直接在 Playground 中回放和调试
2️⃣ 存储升级到 IndexedDB
- Chrome 扩展的 Playground 和 Bridge 改为使用 IndexedDB 进行数据存储
- 相比之前的存储方案,提供更大的存储容量和更好的性能
- 支持存储更复杂的数据结构,为未来功能扩展奠定基础
3️⃣ 自定义重新规划循环限制
- 设置
MIDSCENE_REPLANNING_CYCLE_LIMIT 环境变量,可以自定义在执行操作(aiAction)时允许的最大重新规划循环次数
- 默认值为 10,当 AI 需要重新规划超过这个限制时,会抛出错误建议将任务拆分
- 提供更灵活的任务执行 控制,适应不同复杂度的自动化场景
export MIDSCENE_REPLANNING_CYCLE_LIMIT=10 # 默认值为 10
📱 Android 功能增强
1️⃣ 截图路径区分
- 为每个截图生成唯一的文件路径,避免文件覆盖问题
- 提升了并发测试场景下的稳定性
v0.21 - 🎨 Chrome 扩展界面升级
🌐 Web集成增强
1️⃣ 全新的 Chrome 扩展界面
- 全新的聊天式用户界面设计,提供更好的使用体验
- 界面布局优化,操作更加直观便捷
2️⃣ 超时配置灵活性提升
- 支持从测试 fixture 中覆盖超时设置,提供更灵活的超时控制
- 适用场景:不同测试用例需要不同超时时间的场景
3️⃣ 统一 Puppeteer 和 Playwright 配置
- 为 Playwright 新增
waitForNavigationTimeout 和 waitForNetworkIdleTimeout 参数
- 统一了 Puppeteer 和 Playwright 的 timeout 选项配置,提供一致的 API 体验,降低学习成本
4️⃣ 新增数据导出回调机制
- 新增
agent.onDumpUpdate 回调函数,可在数据导出时获得实时通知
- 重构了任务结束后的处理流程,确保异步操作的正确执行
- 适用场景:需要监控或处理导出数据的场景
📱 Android 交互优化
1️⃣ 输入体验改进
- 将点击输入改为滑动操作,提升交互响应性和稳定性
- 减少因点击不准确导致的操作失败
v0.20 - 支持传入 XPath 定位元素
🌐 Web集成增强
1️⃣ 新增 aiAsk 方法
- 可直接向 AI 模型提问,获取当前页面的字符串形式答案
- 适用场景:页面内容问答、信息提取等需要 AI 推理的任务
- 示例:
await agent.aiAsk('问题描述')
2️⃣ 支持传入 XPath 定位元素
- 定位优先级:指定的 XPath > 缓存 > AI 大模型定位
- 适用场景:已知元素 XPath,需要跳过 AI 大模型定位
- 示例:
await agent.aiTap('提交按钮', { xpath: '//button[@id="submit"]' })
📱 Android 改进
1️⃣ Playground 任务可取消
2️⃣ aiLocate API 增强
- 返回设备像素比(Device Pixel Ratio),通常用于计算元素真实坐标
📈 报告生成优化
改进报告生成机制,从批量存储改为单次追加,有效降低内存占用,避免用例数量大时造成的内存溢出
v0.19 - 支持获取完整的执行过程数据
新增 API 获取 Midscene 执行过程数据
为 agent 添加 _unstableLogContent API,即可获取 Midscene 执行过程数据,比如每个步骤的耗时、AI Tokens 消耗情况、页面截图等!
对了,Midscene 的报告就是根据这份数据生成了,也就是说,使用这份数据,你甚至可以定制一个属于你自己的报告!
详情请参考:API 文档
CLI 新增参数支持调整 Midscene 环境变量优先级
默认情况下,dotenv 不会覆盖 .env 文件中同名的全局环境变量。如果希望覆盖,你可以使用 --dotenv-override 选项。
详情请参考:使用 YAML 格式的自动化脚本
大幅减少报告文件大小
裁剪生成的报告中冗余的数据,大幅减少复杂页面的报告文件大小,用户的典型复杂页面报告大小从 47.6M 减小到 15.6M!
v0.18 - 回放报告功能增强
🚀 Midscene 又有更新啦!为你带来高质量的 UI 自动化体验。
在报告中增加自定义节点
- 为 agent 添加
logScreenshot API,将当前页面的截图作为报告节点。支持设置节点标题和描述,使报告内容更加丰富。适用于关键步骤截图记录、错误状态捕获、UI 验证等。

test('login github', async ({ ai, aiAssert, aiInput, logScreenshot }) => {
if (CACHE_TIME_OUT) {
test.setTimeout(200 * 1000);
}
await ai('Click the "Sign in" button');
await aiInput('quanru', 'username');
await aiInput('123456', 'password');
// 自定义记录
await logScreenshot('Login page', {
content: 'Username is quanru, password is 123456',
});
await ai('Click the "Sign in" button');
await aiAssert('Login success');
});
支持将报告下载为视频
- 支持从报告播放器直接导出视频,点击播放器界面的 下载按钮即可保存。

- 适用场景:分享测试结果、存档重现步骤、演示问题复现
Android 暴露更多配置
-
支持使用远程 adb 主机,配置键盘策略
-
autoDismissKeyboard?: boolean - 可选参数,是否在输入文本后自动关闭键盘
-
androidAdbPath?: string - 可选参数,用于指定 adb 可执行文件的路径
-
remoteAdbHost?: string - 可选参数,用于指定远程 adb 主机
-
remoteAdbPort?: number - 可选参数,用于指定远程 adb 端口
-
示例:
await agent.aiInput('搜索框', '测试内容', { autoDismissKeyboard: true })
const agent = await agentFromAdbDevice('s4ey59', {
autoDismissKeyboard: false, // 可选参数,是否在输入文本后自动关闭键盘。默认值为 true。
androidAdbPath: '/usr/bin/adb', // 可选参数,用于指定 adb 可执行文件的路径
remoteAdbHost: '192.168.10.1', // 可选参数,用于指定远程 adb 主机
remoteAdbPort: '5037' // 可选参数,用于指定远程 adb 端口
})
立即升级版本,体验这些强大新功能!
v0.17 - 让 AI 看见页面 DOM
数据查询 API 全面增强
为满足更多自动化和数据提取场景,以下 API 新增了 options 参数,支持更灵活的 DOM 信息和截图传递:
agent.aiQuery(dataDemand, options)
agent.aiBoolean(prompt, options)
agent.aiNumber(prompt, options)
agent.aiString(prompt, options)
新增 options 参数
domIncluded:是否向模型发送精简后的 DOM 信息,默认值为 false。一般用于提取 UI 中不可见的属性,比如图片的链接。
screenshotIncluded:是否向模型发送截图。默认值为 true。
代码示例
// 提取通讯录中所有联系人的完整信息(包含隐藏的头像链接)
const contactsData = await agent.aiQuery(
"{name: string, id: number, company: string, department: string, avatarUrl: string}[], extract all contact information including hidden avatarUrl attributes",
{ domIncluded: true }
);
// 检查通讯录中第一个联系人的 id 属性是否为 1
const isId1 = await agent.aiBoolean(
"Is the first contact's id is 1?",
{ domIncluded: true }
);
// 获取第一个联系人的 ID(隐藏属性)
const firstContactId = await agent.aiNumber("First contact's id?", { domIncluded: true });
// 获取第一个联系人的头像 URL(页面上不可见的属性)
const avatarUrl = await agent.aiString(
"What is the Avatar URL of the first contact?",
{ domIncluded: true }
);
新增右键点击能力
你有没有遇到过需要自动化右键操作的场景?现在,Midscene 支持了全新的 agent.aiRightClick() 方法!
功能
使用右键点击页面元素,适用于那些自定义了右键事件的场景。注意:Midscene 无法与浏览器原生菜单交互。
参数说明
locate: 用自然语言描述你要操作的元素
options: 可选,支持 deepThink(AI精细定位)、cacheable(结果缓存)
示例
// 在通讯录应用中右键点击联系人,触发自定义上下文菜单
await agent.aiRightClick("Alice Johnson", { deepThink: true });
// 然后可以点击菜单中的选项
await agent.aiTap("Copy Info"); // 复制联系人信息到剪贴板