Midscene 使用攻略
Midscene是一款开源的AI自动化测试工具,支持网页和移动端自动化操作。

上一篇AI控制浏览器相关MCP工具介绍中,我们利用这些控制浏览器的工具,可以进行自动化办公、自动化测试。今天就接着之前的内容,重点说说自动化测试。
今天介绍的自动化测试工具就是 Midscene。它是开源的 AI 操作助手,适用于 Web、移动端。
项目地址:https://midscenejs.com/zh/index.html
功能特性
- 用自然语言编写自动化脚本
- 描述你的目标和步骤,
Midscene会为你规划和操作用户界面。 - 使用
Javascript SDK或YAML格式编写自动化脚本。
- 网页或移动应用
- 网页自动化:可以与
Puppeteer集成,与Playwright集成或使用桥接模式来控制桌面浏览器。 - Android 自动化:使用
JavascriptSDK配合 adb 来控制本地 Android 设备。 - iOS 自动化:使用
JavascriptSDK 配合WebDriverAgent来控制本地 iOS 设备。
Web
Chrome 插件快速体验
前往 Chrome 扩展商店安装 Midscene 扩展:Midscene
配置如下:
OPENAI_BASE_URL="https://openrouter.ai/api/v1"
OPENAI_API_KEY="sk-xxxx"
MIDSCENE_MODEL_NAME="qwen/qwen3-vl-8b-instruct"
MIDSCENE_USE_QWEN3_VL=1
Midscene 已适配的 VL 模型:
考虑到使用成本和OpenRouter的支持,这里模型我使用了官方推荐的qwen3-vl模型,同时它支持深度思考,可以让元素定位更准确。
Action中输入指令:找到搜索框,搜索“Android Studio”并下载。
因为csdn无法上传可视化报告文件,这里就看下回放视频。
midscene_replay
另外插件里面有个Recorder模式,可以记录用户操作生成脚本,我实际使用下来,它可以辅助生成大体框架,细节还需要手动调整。
Chrome 桥接模式(Bridge Mode)
用本地脚本控制Chrome。
安装
npm install @midscene/web tsx --save-dev 或
npm i -g @midscene/cli
安装 dotenv
npm install dotenv --save
在项目根目录下创建一个 .env 文件,并添加以下配置。
OPENAI_BASE_URL="https://openrouter.ai/api/v1"
OPENAI_API_KEY="sk-xxxx"
MIDSCENE_MODEL_NAME="qwen/qwen3-vl-8b-instruct" #或 qwen/qwen3-vl-235b-a22b-instruct
MIDSCENE_USE_QWEN3_VL=1
在脚本中导入 dotenv 模块,导入后它会自动读取 .env 文件中的环境变量。
import 'dotenv/config';
Midscene 插件,并切换到 Bridge Mode 标签页。点击 Allow connection。
测试脚本如下(功能:搜索“Android Studio”并下载):
web:
url: "https://www.google.com/search?q=Midscene"
viewportWidth: 1280
viewportHeight: 960
bridgeMode: 'newTabWithUrl'
tasks:
- name: Search for Android Studio on Google
flow:
- aiInput: "android studio"
locate: "搜索输入框,位于 Google 搜索页面顶部"
- aiTap: "点击搜索按钮"
- aiTap: "Download Android Studio & App Tools"
- aiAssert: "Page title contains 'Android Studio'"
- name: Download Android Studio
flow:
- aiTap: "Download Android Studio Narwhal 4 Feature Drop"
- aiScroll:
scrollType: 'untilBottom'
- aiTap: "I have read and agree with the above terms and conditions"
- aiTap: "Download Android Studio Narwhal 4 Feature Drop | 2025.1.4 for Windows"
midscene_replay_2
也支持ts,运行脚本node xxx.ts。具体api参考:https://midscenejs.com/zh/api.html
上面脚本转为ts如下:
import { AgentOverChromeBridge } from "@midscene/web/bridge-mode";
import 'dotenv/config';
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
Promise.resolve(
(async () => {
const agent = new AgentOverChromeBridge();
// 这个方法将连接到你的桌面 Chrome 的新标签页
// 记得启动你的 Chrome 插件,并点击 'allow connection' 按钮。否则你会得到一个 timeout 错误
await agent.connectNewTabWithUrl("https://www.google.com/search?q=Midscene");
await sleep(3000);
// 这些方法与普通 Midscene agent 相同
await agent.ai('在搜索框中输入 "android studio",然后点击搜索按钮');
// await agent.aiInput('android studio', '搜索框');
await sleep(1000);
await agent.aiTap('Download Android Studio & App Tools');
await sleep(1000);
await agent.aiAssert("Page title contains 'Android Studio'");
await sleep(1000);
await agent.aiTap('Download Android Studio Narwhal 4 Feature Drop');
await agent.aiScroll({ direction: 'up', scrollType: 'untilBottom' },);
await agent.aiTap('I have read and agree with the above terms and conditions');
await agent.aiTap('Download Android Studio Narwhal 4 Feature Drop | 2025.1.4 for Windows');
await agent.destroy();
})()
);
编写提示词(指令)的技巧:
- 提供更详细的描述并提供样例:错误示例:搜’耳机’。正确示例:找到搜索框(搜索框的上方应该有区域切换按钮,如 ‘国内’, ‘国际’),输入’耳机’,敲回车。
- 一个 Prompt (指令)只做一件事:使用 .ai 每次只做一件事。尽管 Midscene 有自动重规划能力,但仍应保持指令简洁。否则,LLM 的输出可能会变得混乱。指令的长度对 token 消耗的影响几乎可以忽略不计。
执行后,会自动生成可视化报告,测试报告里有每个步骤的详细信息。
Android
需要配置Android环境,安装 adb,设置环境变量 ANDROID_HOME。这块我就不过多介绍了。
启动 Playground
npx --yes @midscene/android-playground
Playground如下:

Action:点击“workout”tab,找到搜索入口,进入后输入“pop”,然后点击回车键搜索。搜索有结果后点击搜索结果的第二个内容,最后进入页面后点击收藏按钮。
iOS
首先是准备 WebDriver 服务(专门用于 iOS 设备自动化的服务),需要先设置 iOS 开发环境:
- macOS(iOS 开发必需)
- Xcode 和 Xcode 命令行工具
- iOS 模拟器或真机设备
模拟器配置
第一步: 克隆并设置 WebDriverAgent
git clone https://github.com/appium/WebDriverAgent.git
cd WebDriverAgent
npm install
mkdir -p wda_build
第二步: 手动构建
xcodebuild build-for-testing \
-project WebDriverAgent.xcodeproj \
-derivedDataPath wda_build \
-scheme WebDriverAgentRunner \
-destination "platform=iOS Simulator,id=137F5247-E486-48E7-A396-FCDA911E5E66" \
CODE_SIGNING_ALLOWED=NO
设备id可以使用下面的命令查看:
xcrun simctl list devices available | grep -E "^\s+(iPhone|iPad)" | sed 's/^[ ]*//'
完成后在WebDriverAgent/wda_build/Build/Products/目录下应该看到类似的文件:
WebDriverAgentRunner-Runner.app
WebDriverAgentRunner_iphonesimulator18.0-arm64.xctestrun
第三步: 启动模拟器
xcrun simctl boot 137F5247-E486-48E7-A396-FCDA911E5E66
open -a Simulator
第四步: 安装WebDriverAgentRunner
xcodebuild test-without-building \
-xctestrun wda_build/Build/Products/WebDriverAgentRunner_iphonesimulator26.0-arm64.xctestrun \
-destination "platform=iOS Simulator,id=137F5247-E486-48E7-A396-FCDA911E5E66"
第五步: 测试 WebDriverAgent
每次使用前,打开iOS设备上安装的WebDriverAgent
curl http://localhost:8100/status
正常结果类型这样:
{
"value" : {
"build" : {
"version" : "10.1.3",
"time" : "Oct 26 2025 15:51:52",
"productBundleIdentifier" : "com.facebook.WebDriverAgentRunner"
},
"os" : {
"testmanagerdVersion" : 65535,
"name" : "iOS",
"sdkVersion" : "26.0",
"version" : "18.0"
},
"device" : "iphone",
"ios" : {
"simulatorVersion" : "18.0",
"ip" : "192.168.31.76"
},
"message" : "WebDriverAgent is ready to accept commands",
"state" : "success",
"ready" : true
},
"sessionId" : "153A511A-BC7B-4F4A-B5DB-9C76078DE3A3"
}
启动 Playground
npx --yes @midscene/ios-playground
之后操作和其他平台一致。
真机部分的配置参考:https://appium.github.io/appium-xcuitest-driver/5.12/real-device-config/,我就不多说了。
总结
- 由于每步操作都会调用 AI,运行耗时可能比传统
Playwright用例增加 3 到 10 倍,比如从 5 秒变成 20秒。为了让结果更可靠,token 和时间成本是不可避免的。
有几种方法可以提高运行效率:
- 使用即时操作接口,如
agent.aiTap('Login Button')代替agent.ai('Click Login Button')。更多详情请参阅 API。 - 使用专用的模型。
- 使用较低的分辨率。
- 使用缓存来加速调试过程。
- Action模式可以自动规划,但建议较少的操作整合,不适合完全托管。复杂操作建议写脚本拆分步骤执行:https://midscenejs.com/zh/blog-programming-practice-using-structured-api.html
最后是Midscene中的一段话:
业界的 AI Agent 都在演示“自主规划”,为什么 Midscene 还要开发者提供详细操作步骤?这是一种落后的做法吗?
Midscene 有相当多的工具类、测试类开发者,他们更关注 UI 自动化工具的稳定性和性能。为了确保 Agent 能够在复杂系统中精准运行,准确清晰的 Prompt 依然是眼下的最优解。
为了进一步提高稳定性,我们还提供了即时操作接口(Instant Action)、回放报告、Playground 等工具。他们虽然看似有些“传统”、不太“AI”,但在大量实践后,我们有信心这些实用工具才是提升效率的利器。
我觉得没有完美的工具,只有最适合的工具。合种方案都有他们各自的优势和适合的场景,我个人是比较喜欢Midscene,所以介绍给大家。
更多推荐


所有评论(0)