在这里插入图片描述

上一篇AI控制浏览器相关MCP工具介绍中,我们利用这些控制浏览器的工具,可以进行自动化办公、自动化测试。今天就接着之前的内容,重点说说自动化测试。

今天介绍的自动化测试工具就是 Midscene。它是开源的 AI 操作助手,适用于 Web、移动端。

项目地址:https://midscenejs.com/zh/index.html

功能特性

  1. 用自然语言编写自动化脚本
  • 描述你的目标和步骤,Midscene 会为你规划和操作用户界面。
  • 使用 Javascript SDKYAML 格式编写自动化脚本。
  1. 网页或移动应用
  • 网页自动化:可以与 Puppeteer 集成,与 Playwright 集成或使用桥接模式来控制桌面浏览器。
  • Android 自动化:使用 Javascript SDK配合 adb 来控制本地 Android 设备。
  • iOS 自动化:使用 Javascript SDK 配合 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 和时间成本是不可避免的。
    有几种方法可以提高运行效率:
  1. 使用即时操作接口,如 agent.aiTap('Login Button') 代替 agent.ai('Click Login Button')。更多详情请参阅 API。
  2. 使用专用的模型。
  3. 使用较低的分辨率。
  4. 使用缓存来加速调试过程。

最后是Midscene中的一段话:

业界的 AI Agent 都在演示“自主规划”,为什么 Midscene 还要开发者提供详细操作步骤?这是一种落后的做法吗?
Midscene 有相当多的工具类、测试类开发者,他们更关注 UI 自动化工具的稳定性和性能。为了确保 Agent 能够在复杂系统中精准运行,准确清晰的 Prompt 依然是眼下的最优解。
为了进一步提高稳定性,我们还提供了即时操作接口(Instant Action)、回放报告、Playground 等工具。他们虽然看似有些“传统”、不太“AI”,但在大量实践后,我们有信心这些实用工具才是提升效率的利器。

我觉得没有完美的工具,只有最适合的工具。合种方案都有他们各自的优势和适合的场景,我个人是比较喜欢Midscene,所以介绍给大家。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐