当前位置: 首页 > news >正文

Midscene.js实战指南:如何用视觉AI替代脆弱选择器,一套自然语言搞定Web到手机的UI自动化测试

Midscene.js实战指南:如何用视觉AI替代脆弱选择器,一套自然语言搞定Web到手机的UI自动化测试

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

Midscene.js 是一款面向端到端(E2E)测试的 GUI Agent,它靠"看图说话"驱动 AI 多模态模型,让你用一句句自然语言就能操作 Web、Android、iOS、HarmonyOS 和桌面应用。你不再需要维护脆弱的 CSS 选择器,也不必为每个平台各写一套脚本,这是 Midscene.js 与所有传统 UI 自动化工具最本质的区别。

那个深夜,你还在为一条选择器debug吗

想象一下这个场景:你花了一下午写好一条#login-form > div:nth-child(3) > button定位登录按钮,第二天前端同事顺手改了 DOM 结构,你的整个测试套件全线飘红。更崩溃的是,产品里还有纯图标按钮、<canvas>绘制的图表、跨域 iframe 里的支付组件——用传统工具,这些元素要么"看不见",要么根本测不了。原生 App 呢?要么引入整套重框架,要么靠坐标硬点,换个分辨率就翻车。

这种"测一次改一次"的循环,相信每个写过 UI 测试的人都懂。问题不在你的脚本,而在工具的定位逻辑本身。

一句话认识 Midscene.js

Midscene.js 是一个AI 视觉驱动的 GUI Agent:它像人一样"看着"屏幕截图来理解界面,用自然语言完成定位、点击、输入、断言与数据提取。解决什么问题?选择器脆弱、无语义元素不可达、原生应用与跨域页面难以测试、界面视觉效果无法验证。给谁用?想用更少维护成本做 E2E 测试的开发者、需要跨 Web/Android/iOS/桌面统一测试的团队,以及想快速搭建 UI 自动化的产品与测试工程师。

它和 Selenium、Playwright 到底差在哪

传统工具"读结构",Midscene.js "看像素"。这一字之差,带来的是完全不同的维护体验:

对比维度传统方案(Selenium / Playwright / Cypress)Midscene.js
定位依据DOM / 无障碍树 / 选择器屏幕截图 + 视觉 AI
选择器重构一改结构就失效,需要人工维护无需选择器,UI 变化自动适应
图标按钮 / canvas基本"不可见"人眼可见即可定位
原生 App / iframe需要专用驱动或无法触达同一套视觉 API 通吃
视觉正确性只能断言节点存在能验证颜色、高亮、布局是否"看起来对"

Midscene.js 还有个独特设计:先看后做。模型会先"观察"截图再规划点击位置,这让它天然免疫分辨率变化、页面微调带来的误操作。

上手路线图:3步跑通你的第一个自动化脚本

第一步:装好"眼睛"——配置多模态模型。这是唯一绕不开的准备工作。Midscene.js 支持 Qwen-VL、UI-TARS、Gemini、GLM 等具备 UI 定位能力的多模态模型,也支持可自托管的开源选项。只需要准备模型的 API Key 与服务地址,官方文档apps/site/docs/zh/model-common-config.mdx里有完整对照表。

第二步:用 Chrome Extension 零代码体验。在 Chrome 应用商店安装 Midscene 扩展,粘贴模型配置并保存。打开任意网页,侧边栏输入一句中文指令,比如"点击登录按钮",它就会自己规划步骤并执行。这一步 5 分钟就能完成,非常适合先验证模型效果再写代码。

第三步:把指令升级成可复用的脚本。在项目中安装@midscene/web,用最精简的代码接入:

import { PlaywrightAgent } from '@midscene/web/playwright'; // 创建 agent 后,一句自然语言就是一个步骤 await agent.aiAct('在搜索框输入 "Headphones" 并回车');

不用写选择器、不用管等待时机,这一句就是完整的一步。全部 API 的调用方式见packages/core/src与文档reference/

核心能力,从会用升级到用好

第一级:让脚本"看得懂、点得准"

四个基础 API 覆盖 90% 的日常场景:

  • aiAct:多步骤规划,一句"把第一件商品加入购物车并确认数量变为1"它会自己拆解执行;
  • aiTap/aiInput:单步定位并点击、输入,输入默认替换原有内容;
  • aiAssert:视觉断言,"页面顶部显示导航栏",不满足会抛错并说明原因;
  • aiQuery:结构化数据提取,直接返回 JSON 对象数组。

小技巧:当目标元素特别小、容易和周围元素混淆时,给aiTap加上deepLocate: true,会多一次模型调用专门确认坐标,误点率明显下降。

第二级:让 AI 替你编排流程

遇到"如果出现弹窗先关闭,再点结账"这类带分支的任务,别自己写 if/else。用aiAct把整条路径交给 Agent,它会基于最新的界面状态持续规划,弹窗出不出现它都能应对。只有当流程完全固定、必须精确控制每一步时,才用 JavaScript 编排(aiQuery拿到数据后循环处理)。原则很简单:不确定的流程交给aiAct,确定的流程才自己写代码

第三级:用 YAML 把测试写成"说明书"

不想维护大型测试工程?Midscene.js 支持纯 YAML 脚本,几行就能跑一个检查:

page: url: https://www.bing.com tasks: - name: 搜索天气 flow: - ai: 搜索 "今日天气" - aiAssert: 结果中展示了天气信息

Web、Android、桌面端都能用同一套 YAML 格式,非常适合冒烟测试和关键路径巡检,写法参考apps/site/docs/zh/automate-with-scripts-in-yaml.mdx

跨平台:一套思路,五个平台

只要"能截图",Midscene.js 就能工作。Android 走 adb + scrcpy,iOS 用 WebDriverAgent,加上 HarmonyOS 和桌面端,每个平台都有对应的 Playground 可以先试后写,平台接入指南在apps/site/docs/zh/platforms/目录下。

新手最容易踩的4个坑

坑1:模型没配好,指令永远没反应。症状是运行时报连接错误或超时。解法:先检查MIDSCENE_MODEL_BASE_URLAPI_KEYMODEL_NAME三个环境变量是否齐全,并确认模型属于文档"支持列表"内的 UI 定位型模型。

坑2:Ollama 本地模型返回 403。本地起 Ollama 时扩展访问被拦。解法:设置环境变量OLLAMA_ORIGINS="*"再重启服务。

坑3:浏览器扩展互相打架。报错Cannot access a chrome-extension:// URL,通常是其他扩展注入了 iframe 或脚本。解法:打开 DevTools 找到注入的扩展 ID,去chrome://extensions/禁用它再刷新页面。

坑4:切换模型后点击坐标偏移。同一脚本在官方 API 正常、换到网关后点击位置固定偏移。解法:优先使用视觉定位而非坐标;如必须用坐标,把截图分辨率固定,并阅读 FAQ 里针对 Azure 等网关的配置说明。

真实场景演练:30行代码做一次电商"逛买"巡检

以电商搜索为例,看 Midscene.js 怎么把"人怎么逛,脚本就怎么写"落地:

const agent = new PlaywrightAgent(page); await agent.aiAct('搜索 "Headphones" 并回车'); await agent.aiWaitFor('页面上出现了至少一个耳机商品'); const items = await agent.aiQuery( '{itemTitle: string, price: number}[], 列表中的商品及价格' ); // 对每个商品做断言与点击,完全不需要 DOM await agent.aiAssert('页面左侧有分类筛选栏'); await agent.aiTap('列表中的第一件商品');

为什么这么写?因为aiWaitFor取代了脆弱的 sleep 等待,aiQuery返回的是可直接断言的 JSON,aiTap靠视觉找元素——整段代码里没有一个选择器,页面前端怎么改都不会让这套巡检失效。同样的逻辑,把 agent 换成 Android 的,就成了一台真机上的 App 巡检。

让它跑得更快更稳的4个习惯

  1. 开启规划与定位缓存:相同指令重复执行时命中缓存,官方实测一个案例耗时从 51 秒降到 28 秒。配置cache: { id: "my-test" }即可,缓存文件在./midscene_run/cache/。注意:查询类 API(aiQuery/aiAssert)永不缓存,别指望它们提速。
  2. aiAct补充业务上下文:用agent.setAIActContext('出现Cookie弹窗先关闭,价格单位是美元'),减少模型瞎猜、提高一次成功率。
  3. 复杂任务开deepThink:它把"规划"和"定位"拆成两次独立模型调用,成功率更高,代价是更慢更贵,只在关键流程上开。
  4. 固定视口与截图质量:脚本里统一设置setViewportSize,避免不同机器分辨率导致视觉定位差异。

文档、代码与社区资源一览

想深入,这几个入口最有用:

  • 官方文档apps/site/docs/zh/覆盖快速开始、模型策略、缓存、数据隐私与 FAQ;
  • 核心实现packages/core/src/agent/是 Agent 与视觉定位引擎,packages/web-integration/是各平台接入层;
  • 平台代码:Android 在packages/android/,iOS 在packages/ios/,桌面端在packages/computer/
  • 演示报告apps/report/e2e/里有可直接打开查看的 YAML 测试报告样例;
  • Chrome 扩展与桌面 Studioapps/chrome-extension/apps/studio/,分别对应网页与本地调试体验。

下一步:现在就去点第一个"按钮"

Midscene.js 把 UI 自动化从"维护选择器"拉回到了"描述意图",这不仅是工具的升级,更是测试思路的转变——让 AI 替你"看",你只管说清要什么。别再等下一个重构让你改测试了,现在就动起来:

git clone https://gitcode.com/GitHub_Trending/mid/midscene

然后装好 Chrome 扩展、贴入模型配置,对任意网页输入那句"点击登录按钮"。当它真的替你点下去的那一刻,你就知道为什么说这是测试的新玩法了。

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

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

http://www.cnnetsun.cn/news/4100415.html

相关文章:

  • Elmer FEM实战:如何用免费开源工具完成一次真实的多物理场仿真
  • 锤子助手第112个开关:启用笔记复读的位置、验证方法与混合内容隐私边界
  • 键盘连击修正终极指南:Keyboard Chatter Blocker 逐键防抖完全上手
  • UE4SS DLL加载失败终极排查手册:5站走通Lua注入报错与系统级劫持的完整修复路线
  • WVP-PRO国标GB28181视频平台完整上手指南:一条命令启动,5分钟接入第一批摄像头
  • BiliBili-UWP 完整上手指南:免费开源的 B 站第三方客户端,Windows 桌面观影更顺滑
  • SAGE社交感知生成引擎:异构多智能体导航的生成式路径规划实践
  • 告别付费墙:Wand-Enhancer 本地解锁 WeMod Pro 的完整实操指南(附手机远程控制玩法)
  • WindowResizer窗口大小调整快速上手指南:4步强制改掉任意顽固窗口
  • Seeed Studio XIAO nRF54LM20A开发板实战:从环境搭建到低功耗AI应用
  • 换服必丢角色?用 palworld-host-save-fix 做一次帕鲁存档迁移,从此不怕“创建新角色“
  • FreeRTOS计数信号量:从资源管理到生产者-消费者模型实战
  • FreeRTOS队列深度解析:从原理到实战,掌握嵌入式多任务通信核心
  • L4级自动驾驶巴士量产背后的技术栈与工程化挑战
  • Elmer FEM多物理场仿真从零到实战:一文吃透开源工程软件核心玩法
  • 基于ESP32与WS2812B的智能RGB氛围灯DIY:从硬件选型到网络控制全解析
  • 英文简历不会写怎么办?5款AI工具实测+英文Resume写作模板,外企求职不再被ATS淘汰
  • AE/PR/FCPX动态模板高效使用指南:从解构到创意应用
  • Magnet2Torrent终极指南:如何把磁力链接快速转换为可永久保存的种子文件
  • SparkSQL 之 JDBC 数据转 DataSet 代码实现
  • 基于大语言模型的群体推荐系统:AgentGR模拟器原理与实践
  • 奔驰概念雕塑:解码软件定义汽车时代的数字化转型与设计变革
  • Python爬虫实战:招聘网站职位信息采集系统(完整版)
  • 第 6 篇:「用数据说话」— 性能基准测试如何证明架构
  • 开源无人机DIY全攻略:从STM32飞控到Betaflight调参实战
  • DeepSeek Harness 上手指南
  • ESP32-S3驱动LED点阵屏实现数字雨与动态光效全解析
  • YOLO 航拍微小金具涨点|2721 张输电线路防震锤 2 类 VOC/YOLO 数据集,Stokes/Spiral 型识别、无人机线路巡检全流程落地
  • 单片机毕业设计-基于单片机传感器的药品温湿度监测与定时取药系统设计 基于 STM32/51 单片机的重量检测智能药盒语音播报系统设计(024203)
  • 单片机毕业设计-基于 STM32 的红外感应服药确认智能控制系统开发 声光告警 + 短信通知的 STM32 智能定时药盒设计与实现(024303)