首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
Midscene.js + AI 自动化测试:从自然语言到 Playwright 脚本的生成实践与 TaoToken 接入
📅 2026/10/18 12:49:11
✍️ 爱科研究院
👁 阅读 3,247
1. 从手工用例到可执行脚本Midscene.js 到底解决了什么Midscene.js 是一个把自然语言测试意图翻译成 Playwright 可执行动作的 AI 自动化测试框架。它最直接的价值在于你不再需要为每个按钮、输入框写死选择器而是用「在搜索框输入 iPhone 15」「点击搜索按钮」这样的描述让模型在运行时理解页面结构并生成对应操作。适合谁适合已经会用 Playwright 写基础用例、但被频繁变动的 DOM 和脆弱选择器折磨的测试同学也适合想快速把 PRD 或截图转成回归脚本的团队。传统 Playwright 脚本的痛点是选择器维护成本高。页面改一个 class脚本就红一片。Midscene.js 的思路是把「定位」这件事交给视觉语言模型它截取当前页面结合你的自然语言指令输出一个可执行的动作序列再由 Playwright 驱动浏览器完成。你仍然保留 Playwright 的 test runner、断言和报告体系只是把「找元素」这一步换成了 AI 推理。我试过在一个电商搜索场景里把原来 40 多行的选择器定位代码压缩成 5 行自然语言动作脚本可读性提升明显。但要注意Midscene.js 不是替代 Playwright而是叠加在它之上的一层「语义执行器」。你依然需要 fixture、需要 test 结构、需要断言。真正省掉的是page.locator(.search-input)这类脆弱绑定。这篇内容会按「环境准备 → 模型接入 → 配置片段 → 脚本生成 → 运行验证 → 报错排查」的顺序展开每一步都给可复制的命令和配置。核心检索词就是 Midscene.js、AI 自动化测试、Playwright 脚本生成。如果你正在找「自然语言生成 Playwright 脚本」的落地方案下面的步骤可以直接跟做。需要提前说明Midscene.js 的 AI 能力依赖一个可调用的多模态模型服务。模型要能读截图、能理解指令、能返回结构化动作。所以第二步我们会先把模型接入参数配好再谈脚本生成。否则你写完 spec 文件运行时会卡在模型调用上。2. TaoToken 前置给 Midscene.js 配一个稳定的模型入口Midscene.js 在运行时会调用视觉语言模型来分析页面截图并生成动作。它需要一个兼容 OpenAI 接口规范的模型服务地址和 API Key。TaoToken 提供的就是这样一个统一入口你可以在控制台创建 Key然后把 Base URL 和 Key 填进 Midscene.js 的环境变量。先到官网了解整体能力https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。注册后在控制台创建 API Key地址是 https://taotoken.net/console 。创建完 Key 之后模型对话调试可以在 https://taotoken.net/models 里先验证模型是否能正常读图。Midscene.js 的模型配置走环境变量。官方推荐在项目根目录建.env文件写入模型服务地址、Key 和模型 ID。TaoToken 的 API 基址是 https://taotoken.net/api 注意这个地址不带 UTM 参数直接用于代码里的baseURL。Key 从控制台复制格式通常是一串以sk-开头的字符串。这里有个容易踩的坑Midscene.js 默认可能去连某些固定的模型端点如果你不显式指定MIDSCENE_MODEL_BASE_URL它会走默认值导致 401。所以.env里必须把 base URL 写全包括/v1这一层如果模型服务要求的话。TaoToken 的兼容接口路径是https://taotoken.net/api具体拼接方式以文档为准接入文档在 https://taotoken.net/doc 。模型 ID 的选择上Midscene.js 需要多模态能力也就是能接受图片输入。你在模型对话页面可以先传一张网页截图问它「搜索框在哪里」如果它能返回坐标或描述说明这个模型适合做 Midscene.js 的视觉定位。选好模型后把模型 ID 填进.env的MIDSCENE_MODEL_NAME。如果你打算长期跑编码类或 Agent 类任务可以了解 Coding Planhttps://taotoken.net/coding-plan 。它更适合持续性的开发场景而单次脚本生成和调试用按量 Key 就够了。API Keys 管理页在 https://taotoken.net/api-keys Key 泄露了可以在这里吊销重建。配置完成后建议先用一个最小请求验证模型连通性再进入 Midscene.js 的脚本环节。这样能把「模型不通」和「脚本写错」两类问题分开排查省很多时间。3. 可复制配置.env、fixture 与 Midscene.js 接入片段这一节给的是可以直接粘贴的配置。先建项目目录复用官方示例脚手架。命令如下git clone https://github.com/web-infra-dev/midscene-example.git cd midscene-example/playwright-demo npm install如果你不想 clone也可以手动建一个 Playwright 项目然后安装 Midscene.js 依赖npm init -y npm install -D playwright/test midscene/web npx playwright install chromium接下来在项目根目录创建.env文件。这是 Midscene.js 读取模型配置的地方路径和文件名必须一致# .env MIDSCENE_MODEL_BASE_URLhttps://taotoken.net/api MIDSCENE_MODEL_API_KEYsk-你的TaoToken密钥 MIDSCENE_MODEL_NAME你的多模态模型ID MIDSCENE_MODEL_FAMILYopenaiMIDSCENE_MODEL_FAMILY告诉 Midscene.js 用哪种请求格式兼容 OpenAI 接口时填openai。如果你的模型服务要求不同的字段名以接入文档为准。接入文档https://taotoken.net/doc 。然后建 fixture 文件。Midscene.js 提供PlaywrightAiFixture把ai、aiTap、aiInput、aiQuery、aiWaitFor、aiAssert这些方法注入到 test 上下文。文件放在e2e/fixture.ts// e2e/fixture.ts import { test as base } from playwright/test; import { PlaywrightAiFixture } from midscene/web/playwright; export const test base.extendPlaywrightAiFixture(PlaywrightAiFixture()); export { expect } from playwright/test;Playwright 配置文件playwright.config.ts里指定测试目录和超时。AI 动作比普通点击慢超时给足// playwright.config.ts import { defineConfig } from playwright/test; export default defineConfig({ testDir: ./e2e, timeout: 120000, use: { headless: true, viewport: { width: 1654, height: 705 }, }, });注意.env的加载。Midscene.js 在 Node 环境下不会自动读.env你需要在playwright.config.ts顶部加一行import dotenv/config;并安装dotenvnpm install -D dotenv到这里Base URL、Key、Model ID 三件套就齐了。再强调一次MIDSCENE_MODEL_BASE_URL用https://taotoken.net/api不要带 UTM 参数Key 从 https://taotoken.net/api-keys 获取。配置写错的话运行时最常见的报错就是 401 或local proxy failed下一节会专门讲。4. 生成脚本并验证一次完整的搜索用例运行配置就绪后开始生成脚本。Midscene.js 的脚本结构是 Playwright test AI 动作。下面是一个针对搜索功能的完整 spec文件放在e2e/search.spec.ts// e2e/search.spec.ts import { test } from ./fixture; test.beforeEach(async ({ page }) { await page.setViewportSize({ width: 1654, height: 705 }); await page.goto(https://www.ebay.com/, { waitUntil: load }); }); test(Input valid keyword search, async ({ aiInput, aiTap, aiWaitFor, aiAssert }) { await aiInput(iPhone 15, in the search input field); await aiTap(click the search button); await aiWaitFor(search results page to finish loading); await aiAssert(page displays search results containing iPhone 15); });这段脚本里aiInput负责在搜索框输入关键词aiTap点击搜索按钮aiWaitFor等待结果页加载aiAssert做语义断言。每个动作都会触发一次模型调用Midscene.js 截取当前页面把截图和你的指令一起发给模型模型返回目标元素的位置或判断结果。运行命令npx playwright test e2e/search.spec.ts --headed--headed让你看到浏览器实际操作过程调试阶段很有用。跑通后去掉它即可。第一次运行会慢一些因为每个 AI 动作都要等模型响应。实测下来单步动作在 3 到 8 秒之间取决于模型和页面复杂度。如果你想先验证模型是否真的能读图可以单独跑一个aiQuerytest(query page title, async ({ aiQuery }) { const result await aiQuery(what is the main heading of this page?); console.log(result); });aiQuery返回的是模型对页面的理解结果不执行点击。用它来确认模型接入是否正常比直接跑完整用例更快定位问题。成功运行的标志是 Playwright 报告里四个动作全部通过且aiAssert没有抛错。如果aiAssert失败报告里会带上模型返回的判断理由你可以据此调整断言描述。比如把「包含 iPhone 15」改成「搜索结果列表第一项标题包含 iPhone 15」描述越具体模型判断越稳。生成脚本时如果你用 Trae 或其他 IDE 辅助提示词里要明确要求「严格按 Midscene.js 语法只使用 aiInput、aiTap、aiWaitFor、aiAssert 等合法函数」。否则模型可能生成page.click这类原生 Playwright 写法虽然能跑但失去了 AI 定位的意义。5. 常见报错排查401、local proxy failed 与断言失败跑 Midscene.js 最容易卡在模型调用上。下面按真实报错逐条排查。401 Unauthorized。说明 Key 没被正确读取或已失效。先检查.env里MIDSCENE_MODEL_API_KEY是否有多余空格或引号。然后确认playwright.config.ts顶部有import dotenv/config。如果还报 401去 https://taotoken.net/api-keys 确认 Key 状态必要时重建。注意 Key 只在创建时完整显示一次复制不全也会 401。local proxy failed / connect ECONNREFUSED。这类错误通常是MIDSCENE_MODEL_BASE_URL写错或者本机网络无法到达该地址。确认地址是https://taotoken.net/api不要漏掉协议头也不要多加路径。如果你在公司内网检查是否需要配置出口。这个报错和 Key 无关纯粹是地址或网络问题。reading choices of undefined。模型返回体里没有choices字段说明请求格式和模型服务不匹配。检查MIDSCENE_MODEL_FAMILY是否设为openai。如果模型服务返回的是其他结构需要按接入文档调整。这个错误也常出现在模型 ID 写错、服务返回了错误对象的情况下先看完整响应体再判断。OAuth / token expired。如果你用的是需要 OAuth 刷新的模型服务Midscene.js 不会自动处理刷新。换成静态 API Key 的接入方式即可。TaoToken 的 Key 是静态的不存在这个问题。aiAssert 一直失败。不是模型坏了多半是断言描述太模糊。把「页面正常」改成「页面顶部显示搜索结果数量且第一项标题包含关键词」。另外确认页面确实加载完成可以在aiAssert前加aiWaitFor。如果页面有弹窗遮挡先用aiTap关掉再断言。动作点错位置。Midscene.js 依赖截图理解如果页面元素太小或截图分辨率不够模型可能定位偏差。把 viewport 调大或在指令里加方位描述比如「页面右上角的搜索按钮」。实测 1654x705 对多数电商页面够用。排查顺序建议先跑aiQuery确认模型通再跑单步aiTap确认定位准最后跑完整用例。这样能把问题范围缩小到具体环节不用在整条链路上猜。6. 把脚本生成接进日常回归流程脚本能跑通之后下一步是把它接进日常回归。Midscene.js 的 spec 文件本质就是 Playwright test所以可以直接用 Playwright 的报告、重试和并行能力。你可以在 CI 里跑npx playwright test把 AI 动作的耗时算进超时预算。一个实用技巧把常用的页面操作抽成 helper比如「登录」「搜索」「加入购物车」每个 helper 内部用 AI 动作实现。这样新用例只需要组合 helper不用每次重写自然语言指令。模型调用次数也会因为复用而下降。模型接入方面长期跑回归建议用 Coding Plan 管理额度https://taotoken.net/coding-plan 。单次调试用按量 Key 即可Key 在 https://taotoken.net/api-keys 管理。模型对话页面 https://taotoken.net/models 可以用来快速验证某个模型是否适合读你的页面截图。最后提醒一点Midscene.js 的断言是语义级的不是像素级。它适合验证「页面上有没有出现某类信息」不适合验证「某个像素的颜色值」。把 AI 断言和传统 Playwright 断言结合使用前者管语义后者管精确值回归覆盖会更完整。
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/18 12:44:11
DeepLabv3+跨数据集训练:PyTorch实现VOC+Cityscapes的避坑指南
2026/10/18 12:44:11
WinDivertProxy透明代理编译与运行全指南
2026/10/18 12:44:11
AO工艺10万吨污水处理厂毕业设计:全套CAD图纸与计算要点解析
2026/10/18 13:54:18
Rust泛型编程实战:编写类型安全的通用算法库
2026/10/18 13:54:18
如何为大模型智能体编写高质量的技能指令文件:TaoToken 统一 Key 通道下的 Agent 技能配置实践
2026/10/18 13:54:18
OpenClaw在Win10部署踩坑记:Node.js与npm环境配置到TaoToken接入
2026/10/18 13:54:18
双链表和循环链表
2026/10/18 13:54:18
OpenCV双目测距实战:从视差原理到SGBM立体匹配的完整实现
2026/10/18 13:49:18
DOSBox 0.74修复版运行指南:挂载配置与排错全攻略
2026/10/18 0:02:43
OpenResearch实战:Claude Code、Codex、OpenCode、Cursor 工作流搭建与故障排查
2026/10/18 0:02:43
知识管理核弹:用Obsidian构建第二大脑的工程化方案(TaoToken 统一 Key 接入版)
2026/10/18 0:02:43
金融AI落地指南:从调研报告到技术选型与工程实践
2026/10/18 0:02:43
OpenResearch实战:Claude Code、Codex、OpenCode、Cursor 工作流搭建与故障排查
2026/10/18 0:02:43
知识管理核弹:用Obsidian构建第二大脑的工程化方案(TaoToken 统一 Key 接入版)
2026/10/18 0:02:43
金融AI落地指南:从调研报告到技术选型与工程实践
2026/10/17 10:15:50
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/16 18:46:48
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/16 18:46:46
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)