C
ChaoBro

Midscene 的真正看点:UI 自动化终于可以少写一点脆弱选择器

做过 UI 自动化的人,都被选择器伤过。

按钮文案改了,测试挂;DOM 多套一层,测试挂;设计师把弹窗位置调了一下,测试挂;移动端 WebView 换了渲染方式,测试还是挂。最后你会发现,所谓“自动化测试”,有一半时间在维护测试自己。

这就是 web-infra-dev/midscene 值得关注的原因。它不是又一个 Playwright 包装器,而是把 UI 自动化的入口从“找到某个 CSS selector”改成“描述我要做什么”。仓库描述很直接:AI-powered, vision-driven UI automation for every platform。本次抓取时,它约 13,337 stars、1,004 forks,在 GitHub TypeScript Trending 中单日新增约 99 stars。

README 里的功能说明也很清楚:你可以用自然语言描述目标和步骤,Midscene 会规划并操作用户界面;脚本可以用 JavaScript SDK 或 YAML 写;Web 场景可以接 Puppeteer、Playwright,或者用 Bridge Mode 控制桌面浏览器;移动端则支持通过 adb 控制 Android,通过 WebDriverAgent 控制 iOS 设备和模拟器。

它的关键不是“完全不要代码”,而是把代码写在更稳定的位置。

传统 UI 自动化关注元素:#submit-button.modal .confirmdata-testid=save。Midscene 更像关注意图:点击“保存”、确认弹窗、检查页面里是否出现错误提示。对于经常变化的界面,这种表达更贴近人类测试步骤,也更适合作为 Agent 的操作接口。

Midscene 还提供三类 API:Interaction API 用来操作界面;Data Extraction API 用来从界面和 DOM 提取数据;Utility API 包括 aiAssert()aiLocate()aiWaitFor() 这类辅助能力。再加上它提供 MCP 服务,可以把 Midscene Agent 的原子动作暴露成 MCP tools,让上层 Agent 用自然语言检查和操作 UI。

这就很适合一个实际工作流:

第一层,仍然保留 Playwright 这类确定性测试,覆盖核心路径。它们快、稳定、适合 CI。

第二层,用 Midscene 写“高变化界面”的冒烟测试,比如后台管理系统、运营配置页、活动页面。这些地方 DOM 变化频繁,但人类验证步骤相对固定。

第三层,把 Midscene MCP 接给 coding agent。当前端改完一个页面,Agent 可以自己打开页面,执行“登录、进入订单页、筛选状态、确认列表出现数据”这类动作,再根据截图和断言结果决定是否继续修。

当然,视觉驱动不等于银弹。它会更依赖模型稳定性,也可能比纯选择器测试慢。对支付、权限、数据删除这类高风险流程,仍然应该用更确定的自动化脚本和人工审查兜底。

但趋势已经很明显:UI 自动化正在从“机器读 DOM”走向“机器理解界面”。选择器不会消失,只是它不该再承担所有认知负担。

如果要在团队里试,建议先选最烦但风险最低的流程:例如后台筛选、表单录入、运营配置预览。这些场景变化多、人工验证频繁、出错后损失可控,非常适合用视觉自动化补位。等稳定后,再考虑把部分脚本接进 CI 或交给上层 Agent 调用。不要一上来就碰支付、删除、权限这种高风险链路。

主要来源:GitHub - web-infra-dev/midscene