这几年做UI自动化做得越多,越觉得传统那套“定位元素->执行动作->断言”的方式正在被一个很现实的问题卡脖子:页面改动频繁,选择器说废就废,维护脚本的时间比写脚本还多。直到我接触到Midscene,这种AI驱动的UI自动化框架,思路才真正打开——你不用再关心这个按钮的id是btn_login还是submit-btn,你只需要用自然语言告诉它“点击登录按钮”,大模型会自己理解界面结构、完成操作。而且更妙的是,它不只服务Web端,安卓自动化同样适用,一套逻辑能横跨Web和移动端。
这篇内容我会从实际使用者的角度,把Midscene怎么在安卓环境里跑起来、核心API怎么用、真实项目里会遇到哪些坑,完整地过一遍。不管你是刚接触AI自动化的测试同学,还是已经在用传统框架想转型的工程师,这篇文章应该都能给你一个比较清晰的路线图。
1. 认识Midscene:AI驱动UI自动化到底解决了什么
1.1 传统UI自动化的三个老大难
说句不好听的,传统UI自动化的痛点干过的人都懂,翻来覆去就那三件事。第一是定位脆弱,xpath写得太死,前端小哥改个class名字,脚本第二天就红;写得太活,又容易误点。第二是断言难做,页面上的动态数据、异步加载、弹窗遮挡,任何一个环节节奏不对,断言就会漂。第三是维护成本高,一个业务页面改版,自动化脚本可能要跟着改一整天,改完还可能引入新问题。
这些痛点不是工具不够好,而是问题的本质变了:UI是给人看的,人看图说话的能力很强,但传统自动化工具只能靠结构信息去猜。那能不能让人工智能直接接管“看”这件事?Midscene走的就是这条路。
1.2 Midscene的核心思路:让模型自己“看懂”界面
Midscene的思路其实不复杂,它把大模型塞进自动化链路里,替代掉了传统框架里最脆弱的那两层:元素定位和动作映射。你给它一个任务,比如“点击搜索框,输入关键词”,它会先截取当前界面的截图,把界面上的文本、控件、布局结构转换成多模态信息,然后让大模型决定该在哪个坐标上执行什么操作。
这套机制最大的好处是,你的脚本从“描述实现”变成了“描述意图”。比如“把购物车里的第一个商品数量改为3”,这在传统框架里至少要写三行定位加操作代码,但在Midscene里就是一句自然语言。底层模型如果足够聪明,它会自动解析列表结构、找到“第一个商品”、定位数量选择器,完成操作。对维护者来说,这种抽象级别高很多,页面细节变化时,只要核心交互逻辑没变,脚本基本不用动。
1.3 Web和安卓共用同一套逻辑,为什么重要
很多团队Web自动化和安卓自动化是两套人马两套工具。Web用Playwright或者Selenium,安卓用Appium或者UiAutomator,两边的API、定位方式、调试手段完全不一样,知识体系也割裂。但Midscene从一开始就把移动端纳入了支持范围。
我用下来的感受是,它在安卓上的架构思路和Web端保持了一致:通过ADB和安卓的UI层级信息,让模型看到当前屏幕内容和控件结构,然后基于自然语言动作执行点击、输入、滑动等操作。这意味着你不需要为了安卓去重新学一套定位语法,只要会写Prompt,就能写安卓自动化用例。这种“同一心智模型覆盖多端”的设计,对测试团队来说价值非常大,尤其是需要维护Web端和移动端两套回归用例的情况。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与项目初始化
2.1 环境依赖清单
在开始写代码之前,先把基础环境列清楚。我这里用的是macOS,但Windows和Linux操作逻辑类似,只是个别路径和命令有差异。
- Node.js:建议18以上,Midscene的SDK基于Node生态,版本太低会有兼容问题
- Java环境:安卓SDK和ADB需要Java,一般装JDK 17就行
- Android SDK Platform Tools:提供
adb命令,用于连接设备和获取UI层级 - 安卓设备或模拟器:建议先用模拟器跑通流程,再上真机,调试效率高很多
- 大模型API Key:Midscene本身不自带模型,它需要调用大模型来理解界面和执行决策
我第一次用的时候就是没注意Node版本,结果装依赖一直报错,后来一查是Node 16的兼容问题。这块真的建议提前对好,省得浪费一晚上。
2.2 创建项目与安装依赖
项目初始化不用太花哨,一个干净的TypeScript工程就行。创建一个目录,然后执行:
bash复制mkdir midscene-android-demo
cd midscene-android-demo
npm init -y
npm install typescript tsx @types/node -D
Midscene的安装,核心包和移动端扩展包分开。以我使用的版本为例,Web端是@midscene/web,安卓端是@midscene/android。这里有个细节要注意,不同版本之间API命名会有调整,建议安装后先看一眼包里的类型
