For AI agents: the complete documentation index is available at /zh/llms.txt, the full documentation bundle is available at /zh/llms-full.txt, and this page is available as Markdown at /zh/index.md.
  • 简体中文
  • 像人一样看懂界面
    用自然语言完成 E2E 测试

    Midscene.js 提供基于视觉的 GUI Agent 和自然语言 E2E 测试框架,支持 Web、移动端和桌面应用。

    15k+Github Stars
    MIT完全开源
    #2Github 趋势榜第2名

    用自然语言描述步骤与预期

    按用户的操作意图写步骤,按用户看到的结果写预期。同一个测试意图,可以用 YAML 表达,也可以接入现有 JavaScript 测试。

    YAML · @midscene/test
    Rstest + JavaScript
    Vitest + JavaScript
    beforeEach:
      - gotoUrl: https://your-shop.example
    
    cases:
      - name: "筛选 100 美元以下的耳机"
        steps:
          - aiAct: "搜索耳机,然后将结果筛选为价格低于 100 美元"
          - aiWaitFor: "筛选后的搜索结果已显示"
          - aiAssert: "搜索结果中有商品,且每件商品价格都低于 100 美元"

    为测试而生的 GUI Agent

    Midscene 的 GUI Agent 为已有的 JavaScript 测试提供视觉操作与断言能力。Web 场景推荐接入 Playwright Test,移动端和桌面端推荐接入 Rstest 或 Vitest。

    像人一样观察、操作并验证结果

    E2E 测试的初衷是从用户视角验证完整流程,所以 Midscene 按用户的方式来测。

    1. 观察屏幕读取截图,不依赖 DOM
    2. 执行操作找到目标,点击、输入或滚动
    3. 检查结果断言用户实际看到的内容
    查看实际案例

    一套 API,覆盖不同平台

    视觉定位不依赖界面渲染结构,同一套 API 可用于 Web、移动端、桌面端以及 canvas 等自定义界面。

    模型选择与成本

    Benchmark 成绩

    全新设计的自然语言 E2E 测试框架

    Midscene Test(@midscene/test)是面向自然语言的 E2E 测试框架。用 YAML 描述操作和预期,需要精确控制的逻辑交给 TypeScript。开始使用 Midscene Test

    AI 操作与业务操作写在同一个 YAML 里

    YAML 中的每个步骤都调用一个 Node:AI 操作、平台操作或自定义业务操作,组合起来就是一个用例。

    cases/refund.yaml
    beforeEach:  - order.prepare: { status: paid }业务  - gotoUrl: ${shopUrl}/orders/latest业务cases:  - name: 已支付订单支持全额退款    steps:      - aiAct: 申请全额退款并提交AI      - aiAssert: 页面显示退款申请已提交AI      - order.checkRefund: { status: refunding }业务afterEach:  - clearCookies: {}业务

    让人和 AI 共同维护测试用例

    把可复用的业务逻辑封装成自定义 Node。Midscene Test 会生成 Markdown 格式的 Node 说明书(Node Spec),列出每个 Node 及其参数,测试工程师和 AI Agent 无需阅读 TypeScript 就能编写用例。了解如何开发自定义 Node

    1. nodes/order.ts
      defineNode({
        name: 'order.prepare',
        description: "创建测试订单",
        inputSchema: z.strictObject({
          status: z.literal('paid'),
        }),
        async execute({ input }) {
          await orders.create(input);
        },
      });
    2. midscene-node-spec.md
      ### order.prepare
      创建测试订单
      - status: "paid"
    3. case.yaml
      steps:
        - order.prepare:
            status: paid

    测试框架能力

    Midscene Test 同样具备测试框架应有的能力:生命周期钩子与资源清理、失败重试与超时、隔离的并发执行,以及精确到步骤的报告。

    生命周期钩子与资源清理

    通过 setup、fileSetup、beforeAll、beforeEach 及对应的清理钩子,分别在项目、文件和用例层级准备与清理资源。用例失败、超时或按下 Ctrl+C 后,清理流程仍会执行。

    项目生命周期

    失败重试与超时

    失败用例可以重试,每次尝试都会重新执行 beforeEach、步骤和 afterEach。可以设置步骤超时,用 continue-on-error 在步骤失败后继续执行,用 bail 提前停止。

    失败时如何执行

    并发与隔离

    通过 maxConcurrentFiles 并发运行多个 YAML 文件。fileSetup 为每个文件准备独立的页面、Agent 或设备,并发文件之间不共享状态。

    并发与资源隔离

    精确到步骤的报告

    HTML 报告记录每个步骤的截图、输入、输出、错误和 Agent 回放。通过 #runner-step=last-error 链接,可以从 CI 通知或 PR 评论直接打开最近一次失败的步骤;summary.json 和 result.md 则供脚本和 AI Agent 读取。

    输出与报告

    谁在使用 Midscene

    下一步

    如果希望让 AI 编程 Agent 操作界面,可以了解 Midscene Skills。