Jean's Blog

一个专注软件测试开发技术的个人博客

0%

Midscene.js介绍

UI自动化测试现状

传统的UI自动化测试一直存在这些痛点:

1. 元素定位机制的先天缺陷

传统UI自动化高度依赖Selector API体系(包括ID选择器、类选择器、XPath等),这种基于DOM结构的定位方式造成了测试代码与前端业务代码的深度耦合,即当界面发生细微调整或浏览器环境切换时,测试脚本往往需要同步更新。

2. 测试执行的脆弱性特征

自动化测试过程中常遭遇网络波动、弹窗干扰、元素状态瞬变等偶发异常。传统脚本普遍缺乏智能等待机制和异常恢复策略,导致测试用例执行失败率很高,大大降低了自动化测试结果的可信度。

3. 前端工程的可测性要求

为实现精准元素定位,开发团队需实施属性埋点工程(如强制添加data-testid属性)。这给开发团队也带了额外的工作量。

4. 非标准元素的识别壁垒

传统自动化测试方法对Canvas、SVG、WebGL等现代图形技术存在天然盲区。以数据可视化大屏为例,基于Canvas渲染的图表元件无法通过常规选择器定位,导致核心业务模块缺乏有效测试覆盖。

5. 测试报告的可读性差

传统框架生成的报告普遍存在三大缺陷:①缺乏业务语义关联,仅展示元素定位层级;②错误堆栈信息专业化程度过高,非技术人员难以解读;③缺乏可视化的执行过程展示(如带有元素高亮的录屏),造成错误排查成本太高

6. 技术栈的陡峭学习曲线

主流框架(如Selenium、Playwright)要求掌握特有的框架语法。新晋测试工程师平均需要6-8周才能独立编写稳定脚本。且编写的脚本通常可读性较差,难以在团队内部形成有效的合作机制。

AI驱动的自动化解决方案

1. 元素定位机制革新

通过多模态AI模型实现语义级界面理解,测试脚本以自然语言指令(如”点击左上角语言切换按钮”)替代传统选择器。这种”目标驱动”模式使测试代码与DOM结构解耦,界面重构后无需修改脚本。

2. 智能容错机制

通过精细化的提示词调优,可实现智能等待和异常恢复机制,自动处理网络波动、弹窗干扰等异常场景。

3. 零代码埋点工程

多模态大模型自动提取页面语义信息,无需开发团队添加data-testid等属性。

4. 多模态元素识别

突破传统框架对Canvas/SVG等非标准元素的识别限制,通过视觉+语义融合技术实现复杂图形元素的精准操作。在数据大屏测试中,可自动识别图表中的数值区域。

5. 业务语义化报告

生成包含元素高亮录屏、JSON格式数据快照和自然语言错误描述的可视化报告。某金融审计项目使用后,错误排查效率提升65%。报告支持Playground模式进行交互式调试。

6. 多种开发模式支持

提供Chrome插件的桥接模式、YAML脚本和JavaScript API三种开发模式,测试工程师可通过自然语言指令快速编写脚本。Chrome插件的桥接模式支持轻量级交互,让用户快速在任意网页上体验 Midscene 的主要功能,而无需编写任何代码;YAML脚本通过结构化数据表达支持更灵活多样的测试场景,适合于小型测试项目脚本编写和执行一些简单的冒烟测试,让开发者可以专注于脚本本身而非测试框架;JavaScript API则无缝集成Playwright/Puppeteer等成熟的自动化框架,适用于中大型自动化测试框架搭建(如电商多端同步测试)。

Midscene.js介绍

网页自动化在数据抓取、UI 测试和业务流程优化中发挥着重要作用。然而,传统工具如 Selenium 和 Puppeteer 要求用户具备编程技能,编写复杂的选择器和脚本维护成本高昂。Midscene.js 通过自然语言接口革新了这一领域,用户只需描述任务(如“点击登录按钮”或“提取产品价格”),AI 即可自动执行,大幅降低技术门槛。

Midscene.js 由 web-infra-dev 团队开发,开源于 GitHub(GitHub- web-infra-dev/midscene),采用 MIT 许可。它支持多种 AI 模型,集成 Puppeteer 和 Playwright,提供丰富的功能。本文基于官网(Midscene.js)内容,全面解析其功能、模型、案例、技术细节和优化建议,为开发者提供详尽指南。

Midscene 的运行原理

简单来讲,Midscene 提取了用户界面的结构信息并发送到多模态 AI 服务进行推理。这个流程图展示了 Midscene 和 AI 的交互流程:

image-20250806141257974

特性

自然语言互动 👆:只需描述你的目标和步骤,Midscene 会为你规划和操作用户界面。

Chrome 插件体验 🖥️:通过 Chrome 插件,你可以立即开始体验,无需编写代码。

Puppeteer/Playwright 集成 🔧:支持 Puppeteer 和 Playwright 集成,让你能够结合 AI 能力和这些自动化工具的强大功能,轻松实现自动化操作。

支持开源模型 🤖:支持开源模型 UI-TARS千问 Qwen2.5-VL,相比 GPT-4o、Claude 等闭源模型,不仅在 UI 自动化场景下表现更加出色,还能更好地保护数据安全。

支持通用模型 🌟:支持 GPT-4o、Claude 等通用大模型,适配多种场景需求。

用可视化报告来调试 🎞️:通过我们的测试报告和 Playground,你可以轻松理解、回放和调试整个过程。

支持缓存 🔄:首次通过 AI 执行后任务会被缓存,后续执行相同任务时可显著提升执行效率。

完全开源 🔥:体验全新的自动化开发体验,尽情享受吧!

理解UI、JSON格式回答 🔍:你可以提出关于数据格式的要求,然后得到 JSON 格式的预期回应。

直观断言 🤔:用自然语言表达你的断言,AI 会理解并处理。

通过Chrome插件快速体验

安装与配置

  1. 前往Chrome扩展商店安装Midscene扩展,https://chromewebstore.google.com/detail/midscenejs/gbldofcpkknbggpkmbdaefngejllnief

  2. 配置模型环境

    • 配置模型

      image-20250716135225008

    配置完成后,可立即开始使用Midscene。它一共有四个关键操作Tab:

    • Action: 与网页进行交互,这就是所谓的自动规划(Auto Planning)。
    • Query: 从界面中提取 JSON 数据。
    • Assert: 验证页面。
    • Tap: 在某个元素上点击,这就是所谓的即时操作(Instant Action)。

开始体验

我们以百度搜索为示例,在浏览器先打开百度地址:https://www.baidu.com,在谷歌浏览器插件内输入以下内容

1
打开网址:https://www.baidu.com,输入搜索内容:Midscene.js,点击百度一下

点击Run,结果为:
image-20250716140010958

我们可以很清晰的看到,执行过程,先进行元素定位,在进行操作,之后会产出一个报告,并可以下载。

模型选择与配置

Midscene.js 支持两种类型的 AI 模型:

  1. 通用多模态 LLM:接受文本和图像输入的模型。GPT-4o 是这种类型模型的代表。
  2. 支持视觉定位的 VL 模型:除了接受文本和图像输入外,这些模型还可以给出指定元素的坐标信息(Visual Grounding)。Midscene 已经适配了 Qwen-2.5-VL, Gemini-2.5-ProUI-TARS 作为这种类型的模型。

GPT-4o

GPT-4o 是 OpenAI 提供的通用 LLM 模型,支持图像输入。这是 Midscene.js 的默认模型。

我们推荐在 GPT-4o 中使用逐步指令(step-by-step)的提示词。

特性

  • 易于上手:OpenAI 提供了非常友好的 API 接入,你只需要获取 API 密钥即可。
  • 表现平稳:它在交互(Action)、断言(Assertion)和查询(Query)方面表现均比较良好。

在 Midscene.js 中使用时的限制

  • 成本较高:Midscene 需要将截图和 DOM 树一起发送给模型,这会导致 token 消耗较高。例如,在 1280x800 分辨率下,eBay 首页需要 6000 个 token 输入,搜索结果页面则需要 9000 个 token 输入。因此,它的成本会显著高于其他模型。
  • 内容限制:它无法处理跨域的 <iframe /><canvas /> 标签中的内容。
  • 分辨率限制:它无法处理分辨率超过 2000x768 的图像。超尺寸输入会导致输出质量下降。
  • 小图标识别能力较差:它可能无法准确定位小图标。
  • 不支持 Android 自动化:它不支持 Android 自动化。

配置

1
2
3
OPENAI_API_KEY="......"
OPENAI_BASE_URL="https://custom-endpoint.com/compatible-mode/v1" # 可选,如果你想要使用一个不同于 OpenAI 官方的接入点
MIDSCENE_MODEL_NAME="gpt-4o-2024-11-20" # 可选,默认是 "gpt-4o"。

Qwen-2.5-VL

从 0.12.0 版本开始,Midscene.js 支持千问 Qwen-2.5-VL 模型。

Qwen-2.5-VL 是一个专为图像识别设计的开源模型,由阿里巴巴开发。它提供了视觉定位(Visual Grounding)的能力,可以准确返回指定元素的坐标信息。无论是交互、断言还是查询,Qwen-2.5-VL 在 Midscene 的综合表现比较优秀。我们推荐使用 72B 版本。

Qwen-2.5-VL 具备操作规划(action planning)能力,可以自主控制应用程序,但我们仍然推荐开发者使用详细的提示词来驱动,以获得更稳定和可靠的结果。

特性

  • 低成本:Qwen-2.5-VL 支持视觉定位(Visual Grounding),不需要发送 DOM 树给模型。和 gpt-4o 相比,它可以节省 30% 到 50% 的 token 数量。在阿里云官方部署版本中,费用消耗可以下降 80% 以上。
  • 高分辨率支持:Qwen-2.5-VL 支持更高的分辨率输入,足以满足大多数情况。
  • 开源:这是一个开源模型,因此你可以选择使用云提供商已经部署好的版本,或者自己部署到你自己的服务器上。

在 Midscene.js 中使用时的限制

  • 小图标识别能力较差:为了准确识别小图标、小元素,你可能需要开启 deepThink 参数并调优描述,否则识别效果无法保证。
  • 断言能力不足:在某些情况下,Qwen-2.5-VL 的断言能力可能不如 gpt-4o

配置

除了常规配置,你还需要包含 MIDSCENE_USE_QWEN_VL=1 配置来启用 Qwen 2.5 模式。否则,它将使用默认的 gpt-4o 模式(这将使用更多的 token)。

1
2
3
4
OPENAI_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1" # 或任何其他提供商的接入点。
OPENAI_API_KEY="......"
MIDSCENE_MODEL_NAME="qwen-vl-max-latest"
MIDSCENE_USE_QWEN_VL=1 # 别忘了配置这项,用于启用 Qwen 2.5 模式!

UI-TARS

UI-TARS 是一个专为 UI 自动化设计的开源模型。它仅以截图作为输入,并执行人类常用的交互(如键盘和鼠标操作),在 10 多个 GUI 基准测试中取得了顶尖性能。UI-TARS 是一个开源模型,并提供了不同大小的版本。

我们推荐在 UI-TARS 中使用目标驱动的提示词(target-driven prompt),如“使用用户名 foo 和密码 bar 登录”,它会逐步完成动作规划并执行。

特性

  • 适用于探索性场景:UI-TARS 在开放性任务场景中表现出色,例如 “帮我发一条微博”,它能多次进行尝试,直到找到正确的操作步骤。
  • 速度:以火山引擎部署的 doubao-1.5-ui-tars 作为基准,它的返回速度快于其他模型。
  • 原生图像识别:UI-TARS 有视觉定位(Visual Grounding)的能力,和 Qwen-2.5-VL 一样,在使用 UI-TARS 时, Midscene.js 不需要发送 DOM 树。
  • 开源:UI-TARS 是一个开源模型,因此你可以选择部署到你自己的服务器上,你的数据将不再发送到云端。

在 Midscene.js 中使用时的限制

  • 断言能力较差:在某些情况下,UI-TARS 的断言能力可能不如 gpt-4o
  • 无法固定操作路径:UI-TARS 具备较强的探索能力,它可能会主动多次尝试不同的操作路径,这可能会导致每次调用时操作路径不固定。

配置

除了常规配置,你还需要包含 MIDSCENE_USE_VLM_UI_TARS 参数来指定 UI-TARS 版本,支持的值为 1.0 1.5 DOUBAO(火山引擎版本)。否则,你会遇到一些 JSON 解析错误。

1
2
3
4
OPENAI_BASE_URL="....."
OPENAI_API_KEY="......"
MIDSCENE_MODEL_NAME="ui-tars-72b-sft"
MIDSCENE_USE_VLM_UI_TARS=1 # 别忘了配置这项用于 UI-TARS 模式!

如果使用的是火山引擎平台的doubao-1.5-ui-tars 模型,设置配置参数为:

1
2
3
4
5
# 注意 URL 最后填写到 /v3 结束即可
OPENAI_BASE_URL="https://ark.cn-beijing.volces.com/api/v3"
OPENAI_API_KEY="...."
MIDSCENE_MODEL_NAME="ep-2025..."
MIDSCENE_USE_VLM_UI_TARS=DOUBAO

Gemini-2.5-Pro

Gemini-2.5-Pro 是 Google Cloud 提供的模型。它和 Qwen-2.5-VL 类似,但它是闭源的。

Midscene.js 从 v0.15.1 版本开始支持 Gemini-2.5-Pro 模型。

配置

1
2
3
4
OPENAI_BASE_URL="https://generativelanguage.googleapis.com/v1beta/openai/"
OPENAI_API_KEY="...."
MIDSCENE_MODEL_NAME="gemini-2.5-pro-preview-05-06"
MIDSCENE_USE_GEMINI=1