news 2026/9/15 21:29:33

Midscene 自然语言 UI 自动化测试快速上手

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Midscene 自然语言 UI 自动化测试快速上手

Midscene 自然语言 UI 自动化测试快速上手

【免费下载链接】midsceneGUI Agent for E2E Testing项目地址: https://gitcode.com/GitHub_Trending/mid/midscene

Midscene 是一个开源的 GUI Agent,靠视觉 AI 完成 Web、移动端和桌面的 UI 自动化测试与界面操作。你不用写任何选择器,用自然语言就能让程序完成点击、断言和数据提取。适合测试工程师、前端开发,以及不写代码但想自动化重复点击的人。

你实际会在哪些场景需要它

这节说清楚三件事:什么时候值得引入 Midscene。

界面里全是图标按钮和 canvas。结算按钮只有图标没有文字,游戏画面画在 canvas 上。传统框架要翻 DOM 找唯一标识,Midscene 只看截图,按外观和位置找控件。Android、iOS、HarmonyOS 这类原生应用也一样能操作,不用换工具。

页面经常改版。前端一重构,选择器脚本就成片失效。视觉方案不依赖 DOM 结构,屏幕长得一样,脚本就不需要动。

要验证的是"用户看到什么"。DOM 断言只能证明元素存在,证明不了它显示得对不对。Midscene 像人一样看屏幕,能判断颜色、高亮、布局、报错提示的位置。

三条上手路径:零代码、低代码、深度定制

按你愿意写多少代码来选。

先体验:Chrome 扩展的零代码路线

适合你:一行代码都不想写,只想先看效果。 从哪步开始:在 Chrome 网上应用店搜到 Midscene 装上,打开任意网页,在右侧边栏输入"点击登录按钮"这类指令直接运行。

扩展和@midscene/web包共享同一套核心能力。你在边栏里试过的指令,后面可以原样搬进代码里。

Chrome 扩展的右侧边栏,可直接试验动作、数据提取和视觉断言

再写脚本:Bridge 桥接模式的低代码路线

适合你:想从终端控制浏览器,还要复用浏览器里已登录的状态。 从哪步开始:装上扩展并打开桥接开关,在终端写几行脚本附着到当前标签页。因为它就是你本机的真实浏览器,cookies、插件、登录状态都还在,脚本跑一半你还可以手动接管。具体做法见 bridge-mode.mdx。

桥接模式把本地脚本连上桌面浏览器,扩展面板里能看到监听状态

做成项目:SDK 与 YAML 的深度定制路线

适合你:要把自动化放进测试工程和持续集成。 从哪步开始:先选集成方式。已经在用 Playwright 的话,把现有的page包一层PlaywrightAgent就获得了视觉能力;只想跑简单流程,就写.yaml脚本用命令直接执行;规模大了再上 Midscene Test(Beta),它把声明式流程和可编程 Node 分开,API 调用、数据准备、清理都能封装成可复用节点。

5 分钟跑通第一个示例

这节一步步带你跑一个能控制浏览器的桥接脚本。

第一步,装依赖。

# 安装 Web 包和 tsx 运行时 npm install @midscene/web tsx --save-dev

第二步,配置模型。Midscene 靠多模态模型读截图做决策,需要把模型服务写进环境变量(以豆包为例,key 换成你自己的):

# 模型服务配置,替换成你自己的 API Key export MIDSCENE_MODEL_BASE_URL="https://ark.cn-beijing.volces.com/api/v3" export MIDSCENE_MODEL_API_KEY="your-api-key" export MIDSCENE_MODEL_NAME="doubao-seed-2-1-turbo-260628"

第三步,写脚本。在扩展里打开桥接开关,把下面内容存成demo.ts

// 引入桥接模式 Agent import { AgentOverChromeBridge } from '@midscene/web/bridge-mode'; const agent = new AgentOverChromeBridge(); // 创建 Agent await agent.connectCurrentTab(); // 附着到当前激活的标签页 await agent.aiAct('输入 Midscene.js 并按回车搜索'); // 执行自然语言指令

第四步,运行并观察。

# 运行脚本,扩展会弹确认框,点允许即可 npx tsx demo.ts

你会看到浏览器搜索框自己被打上字、完成搜索。运行结束后会生成一份 HTML 报告,每步的截图、操作和结果都在里面,点开后逐张看即可。

它能帮你干的事

挑三个最常见的用法。

1. 同一功能跨平台回归。同一套 Agent API 覆盖 Web、Android、iOS、HarmonyOS 和桌面,流程逻辑不用按平台重写。在 Android Playground 里输入"打开设置查看系统版本",左侧实时投屏,右侧逐步执行:

Android Playground 左侧投屏、右侧逐步操作,与 Web 端使用同一套 API

// 同一条指令,Web 页面和安卓设备上都能跑 await agent.aiAct('打开设置,查看当前系统版本');

2. 把页面变成结构化数据。aiQuery让你用自然语言加类型描述提取数据,直接返回 JSON 数组,适合盯价格、抓列表、整理表单内容:

// 提取商品名称和价格,返回 {name, price} 数组 const items = await agent.aiQuery('页面中的商品,{name: string, price: number}[]');

3. 断言视觉结果。aiAssert检查"预期外观是否出现",成立就继续,不成立就抛错并记录原因。适合验证选中高亮、报错提示、canvas 画出来的内容:

// 断言不通过时会抛错,错误里带模型给出的原因 await agent.aiAssert('选中的套餐带有蓝色边框和勾选标记');

和现有工具链怎么搭配

这节只讲搭配思路,不贴完整配置。

  • Playwright:把已有的page包进PlaywrightAgentaiActaiAssert就能用,传统expect与视觉断言可以写在同一个用例里。
  • Puppeteer:思路一致,同样包住现有 page 对象。
  • YAML 脚本:流程写在.yaml文件里,用midscene命令直接跑,适合不想维护测试框架的简单流程。
  • Midscene Test(Beta):YAML 写流程,TypeScript Node 写 API 调用和数据准备,一个退款用例可以"API 建单 + UI 退款 + 结果校验"串起来。
  • AI 编程工具:装上 Midscene Skills,你常用的 AI 编码 Agent 也能操作界面,帮你一起写用例。

更多细节读 basics.mdx 和 quick-start.mdx。

避坑与实践经验

以下几条都是实际会踩的坑。

  • 选模型要看它有没有 UI 定位能力,也就是能根据截图指出元素在哪个位置。Qwen、豆包、GLM、UI-TARS、Gemini 等主流多模态模型都在支持列表里,拿不准就先用扩展的 Playground 试一条指令。
  • 桥接模式下,模型配置要写在终端环境变量里,不是浏览器侧。不少人漏了这一步,脚本跑起来却报没有模型。
  • 扩展报Cannot access a chrome-extension:// URL of different extension,通常是别的扩展往页面里注入了脚本。去chrome://extensions禁用冲突的那个,刷新重试。
  • 本地 Ollama 模型报 403,把环境变量OLLAMA_ORIGINS="*"设上,允许扩展访问。
  • 单步操作用aiTapaiInput,多步或有条件分支的流程才用aiAct。aiAct 会持续重新规划,更费时间也更费 token。
  • 桥接脚本要上传本地文件时,先在扩展详情页打开"允许访问文件网址",再重新连接。

常见疑问

不联网能用吗?视觉识别要调用多模态模型,云端 API 或自托管开源模型都可以。自托管的话,基本可以离线跑。

商业使用要授权吗?项目是 MIT 协议,商用免费。

完全不写代码能玩吗?可以,Chrome 扩展里直接自然语言操作;Android、iOS 和桌面端也各有一个 Playground 可以上手。

用起来贵不贵?截图方案不把整棵 DOM 发给模型,官方 AppControlBench 评测里 60 个任务的模型调用总费用是 0.59 美元。

迈出第一步

Midscene 把"看屏幕、动手、核对结果"变成了可编排的能力。它不打算取代你现有的所有工具,而是补上那些选择器写不动的最后几步。先用小场景试,再决定往哪个平台和哪条工具链上推进。

  • 安装 Chrome 扩展,在任意网页上跑一条自然语言指令
  • 配好多模态模型环境变量,5 分钟跑通第一篇桥接脚本
  • 用 YAML 写一条回归流程,打开 HTML 报告检查执行细节

【免费下载链接】midsceneGUI Agent for E2E Testing项目地址: https://gitcode.com/GitHub_Trending/mid/midscene

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 21:28:57

Flutter混合开发中dart_apitool的鸿蒙API兼容性实践

1. 项目背景与核心价值在Flutter混合开发领域,API兼容性一直是困扰开发者的痛点问题。特别是在鸿蒙(HarmonyOS)生态中,当Flutter插件需要同时维护Android、iOS和鸿蒙三个平台时,API的破坏性变更(Breaking C…

作者头像 李华
网站建设 2026/9/15 21:27:23

3个真实案例对比评测:在c盘做网站可以吗

3个真实案例对比评测:在c盘做网站可以吗 域名解析报错,服务器连不上,后台一片空白。这是很多刚接触建站的朋友最崩溃的时刻。你明明照着教程敲了代码,配置了环境,结果一访问 localhost 或者刚买的域名,就是打不开。别慌,这种“域名服务器搞不懂”的错觉,往往源于一个最基础的误区:…

作者头像 李华
网站建设 2026/9/15 21:23:41

UART通信原理与实战:从时序契约到工业级调试

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

作者头像 李华
网站建设 2026/9/15 21:23:08

Transformer原理与PyTorch实现:从注意力机制到代码实战

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

作者头像 李华
网站建设 2026/9/15 21:22:35

混凝土ERP选型:聚焦时间熔断与动态配比的刚性约束

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

作者头像 李华