开源自动化框架怎么选:从浏览器到手机与视觉 Agent
按控制方式、运行端、可观测性和维护成本比较常见开源自动化框架,帮助你从场景而不是星标出发做技术选型。
目录
先问“要控制什么”,再问“用哪个框架”
自动化框架很容易陷入星标数量竞赛:浏览器有 Playwright、Selenium、DrissionPage,手机有 Appium、uiautomator2、Maestro,视觉 Agent 又有 Midscene、browser-use 等。它们解决的并不是同一个问题。
选型前先回答四个问题:
- 目标是网页、原生移动应用、桌面窗口,还是多端混合?
- 需要稳定的控件语义,还是只能依赖截图和视觉理解?
- 流程是测试回归、数据采集、业务操作,还是开放式 Agent 探索?
- 失败后是否需要截图、网络包、录像和可重放步骤来定位?
如果这些问题没有答案,直接比较 API 很容易选出“功能最多但最难维护”的方案。
四类控制模型
1. 浏览器协议控制
Playwright 是工程化 Web 自动化的常见基线:浏览器、网络、断言、并行和追踪工具较完整,适合测试和确定性业务流程。
DrissionPage 的特色是把 requests 与浏览器控制放进同一套 Python API,并通过 CDP 直连浏览器。需要在“HTTP 请求效率”和“浏览器页面能力”之间切换时,它的混合模式很有吸引力。
这类框架的共同优点是 DOM 和可访问性树提供了比像素坐标更稳定的语义;共同缺点是页面改版、登录态和验证码仍然需要人工设计恢复路径。
2. 移动端控件与设备控制
uiautomator2 面向 Android 原生控件,设备端提供 HTTP 服务,Python 侧可以直接查找、点击和读取控件,不必引入完整的 Appium 驱动链。它适合单机或小规模设备控制,尤其适合希望保持依赖简单的项目。
Appium 仍然是跨平台移动测试的标准选项,生态和协议更完整,但部署层次也更多。遇到 iOS、复杂驱动或团队已有 Appium 基础设施时,它通常是更稳妥的兜底。
3. 声明式端到端流程
Maestro 用 YAML 描述测试步骤,并内置等待、重试和可视化工具。它的优势不是提供最多底层 API,而是让常见的端到端流程更容易阅读和交接:
appId: com.example.app
---
- launchApp
- tapOn: "Sign in"
- inputText: "demo@example.com"
- tapOn: "Continue"
- assertVisible: "Dashboard"
如果团队需要的是“测试人员也能维护的流程文件”,声明式工具往往比一套更强大的编程 API 更合适。
4. 视觉与 Agent 控制
Midscene 代表的是视觉 GUI Agent 路线:模型根据截图和页面状态理解界面,跨 Web、Android、iOS 或桌面执行动作。browser-use 则更聚焦让语言模型操作 Web 浏览器。
视觉方案可以处理没有稳定选择器的界面,但代价是结果更难完全确定:同一个提示词可能因为页面细节、模型版本或截图变化产生不同动作。它们更适合探索性任务和人机协作,不应自动替代所有有明确状态机的流程。
反检测不是通用的“稳定性开关”
一些 Web 工具会强调指纹隐藏或反检测能力,例如 Camoufox 和与 Playwright API 兼容的 Patchright。这类能力可能解决特定测试环境的兼容问题,但不等于可以绕过网站规则,也不等于业务流程本身更可靠。
用于授权测试时,应该优先关注:
- 是否符合目标站点的服务条款和测试范围;
- 是否有速率限制、测试账号和停止开关;
- 是否能记录每次动作,方便追责和复盘;
- 是否可以优先使用官方 API,而不是模拟用户界面。
把“反检测”当成默认架构,会掩盖登录态管理、幂等性和错误恢复等真正的工程问题。
设备农场什么时候值得引入
单机阶段通常不需要设备调度平台。只有当设备数量、并发任务和权限审计开始成为瓶颈时,才值得评估 DeviceFarmer/stf 或 atxserver2:
| 阶段 | 更合适的方案 | 主要原因 |
|---|---|---|
| 单台 Android | uiautomator2 | 依赖少,调试直接 |
| 少量跨端测试 | Appium 或 Maestro | 协议和流程更统一 |
| 多台设备并行 | atxserver2 / STF | 分配、回收和审计设备 |
| 开放式 Web Agent | Playwright + browser-use | 保留底层控制能力 |
设备农场本身不能解决脚本幂等、账号隔离和测试数据污染。引入前应先把单机流程的状态边界定义清楚。
按场景做选择
可以把常见需求归纳成下面几条:
- Web 回归测试:从 Playwright 开始,先建立稳定选择器、追踪和失败截图。
- Web 请求与浏览器混合:评估 DrissionPage,减少两套客户端之间的状态搬运。
- Android 原生操作:单机优先 uiautomator2;跨平台和团队标准化优先 Appium。
- 测试流程交接:选择 Maestro 这类声明式方案,让流程文件成为可审查的文档。
- 没有稳定控件语义的探索任务:再考虑视觉 Agent,并设置人工确认和预算边界。
- 多设备并行:先补齐设备生命周期、任务租约和日志,再引入设备农场。
数据快照与维护提醒
框架的星标、最近提交和平台支持会快速变化。任何横向对比都应该注明抓取日期,并在真正落地前重新查看官方仓库的 README、许可证、发布记录和已知问题。星标适合衡量社区热度,不适合单独证明稳定性。
最后,自动化系统最重要的指标通常不是“能不能点到按钮”,而是失败后能不能安全停止、重试是否幂等、状态是否可观测,以及换一台机器后能否复现。先把这些基础能力做好,再追求更聪明的 Agent,往往能得到更可靠的结果。