前言
上一篇文章,我们分享了基于 Claude Code + Playwright CLI 实现 Web 端 UI 自动化测试的方案。核心思路是"AI 做一次学习,脚本做重复执行",用双层引擎把 Token 消耗降到最低。
这次,我们把目光转向移动端。很多测试团队的实际业务场景是:用例写在 XMind 或 Markdown 里,需要真机或模拟器上跑 Android App,手工点一遍又一遍,效率低、容易漏。
围绕这个痛点,我们基于 Claude Code + agent-device 做了一套移动端 UI 测试自动执行方案。方案继承了 Web 端的核心理念,同时针对移动端的特殊性(ADB 连接、中文输入、系统弹窗等)做了大量适配。
一、整体架构:用例 → Skill → 设备操作
整个方案的架构和 Web 端一脉相承:
用例层 — 测试用例放在 Markdown 文件里,用自然语言写操作步骤和预期结果。支持 XMind 打星标一键导出为 Markdown 用例。
调度层 — 一个叫 app-run-test-suite 的 Skill(Claude Code 自定义指令),负责解析用例、调度执行、生成报告。支持单条跑、批量跑、XMind 导入后自动跑。
执行层 — 核心引擎。通过 agent-device 驱动 Android 设备,LLM 逐步操作:每步先截图分析页面 → 找到目标元素 → 执行操作 → 验证结果。
二、agent-device :移动端操控底座
底层设备驱动我们选的是 agent-device,一个专门为 AI Agent 设计的 Android 设备操控工具。主要看重几点:
语义定位器(find) — 不用写 XPath 或 resource-id,直接用自然语言找元素: find text "登录" click、find label "用户名" fill "admin"快照机制 — snapshot -i获取当前屏幕所有可交互元素,带@eN引用,AI 看一眼就知道页面上有什么断言验证(is) — is visible 'text="登录成功"'验证元素状态,断言失败直接返回非零退出码全操作覆盖 — 点击、输入、滚动、长按、滑动、截图、系统弹窗处理、剪贴板操作……手工测试能做的它都能做
安装一行命令:
npm install -g agent-device三、执行流程:五步闭环
整个执行流程分为五步,每一步都有明确的输入输出:
第一步:用例解析与准备
支持三种模式:
单条执行:传入具体用例文件,只跑这一条 批量执行:传入用例目录,读取用例列表后逐条跑 XMind 导入:无参数时自动检测 .xmind 文件,解析生成用例后再执行(如图有带有⭐的用例)

解析完成后,系统会显示执行计划,标注哪些用例有之前执行成功的精简步骤(_refined.md),优先使用精简版本。
第二步:环境检查与启动
这一步确保设备和应用都就绪:
检查 agent-device 是否已安装 启动 ADB 守护进程(减少 Windows 下弹窗干扰) 连接 ADB 设备(真机 USB 或模拟器 adb connect 127.0.0.1:7555)关闭系统动画(关键!Android UI 动画会导致快照超时) 关闭残留会话,启动目标应用
环境检查通过后显示就绪信息,包含 agent-device 版本、设备序列号、应用包名等,一目了然。
第三步:LLM 逐步执行(核心)
这是整个方案最复杂的部分。每条用例的执行流程:
快照分析 — snapshot -i获取当前屏幕交互元素智能元素定位 — 根据"智能引用解析规则"分析快照,找到实际要操作的元素 执行操作 — 用 find语义定位器或@eN引用操作元素验证预期结果 — 用 is断言命令验证页面状态持久化结果 — 写入 JSON 结果文件 + 生成精简步骤文件
其中,"智能引用解析规则"是一个非常关键的设计。举个最常见的例子:
页面上的输入框通常有一个标签(如"用户名")紧挨着一个输入框。快照里长这样:
@e24 [group] "用户名"@e25 [text-field] "" [editable]AI 看到"用户名"标签后,知道要操作的是紧邻的 @e25 这个 text-field,而不是标签本身。这个规则覆盖了标签+输入框、标签+按钮、标签+开关、标签+下拉框等几乎所有常见 UI 组合模式。
第四步:生成 HTML 报告
所有用例跑完后,调用报告脚本合并所有 JSON 结果:
python generate_html_report.py --merge "reports" --save-json

生成的 HTML 报告截图内嵌(base64),不依赖外部资源,打开就能看。每条用例的每步操作截图、预期结果和实际结果对比都一目了然。
第五步:输出控制台总结
跑完直接在终端看到结果:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 测试执行完毕━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 总计: 5 条 通过: 3 条 失败: 1 条 错误: 1 条 通过率: 60.0% 总耗时: 5m 12s━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ HTML报告: reports/test-report-2026-05-18.html━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
四、快照缓存策略:减少冗余操作
移动端快照(snapshot -i)是 IO 密集操作,每步都执行会拖慢速度。方案设计了"快照缓存策略":
核心原则:只有纯文本输入(fill/type)和收起键盘后可以复用缓存,其他所有操作后都重新快照。
举个例子:
步骤1:snapshot -i(首次获取缓存)步骤2:fill 姓名 "张三" → 缓存仍有效步骤3:fill 电话 "13800138000" → 缓存仍有效(复用)步骤4:fill 地址 "北京市" → 缓存仍有效(复用)步骤5:click "提交" → 缓存失效(点击操作改变了页面)步骤6:snapshot -i(重新获取)→ 新缓存一个表单页面,6 步只需要 2 次快照,而不是 6 次。
五、移动端特殊处理
移动端测试和 Web 端有不少差异,方案做了针对性适配:
中文输入问题 — Android 上 fill 和 type 输入中文可能报 NullPointerException。替代方案:如果目标文本在列表中可见,直接 find text "中文" click 选中;否则通过 ADB clipboard 设置剪贴板再粘贴。
系统弹窗处理 — 权限弹窗、系统对话框等,用 agent-device alert get 查看、alert accept 接受、alert dismiss 拒绝,不用手动处理。
智能等待 — 不盲目 sleep。页面跳转后用 find "目标文本" wait 5000 等待元素出现,比固定 sleep 更可靠也更快。
分级重读策略 — 批量执行时,每 5 条用例重读一次 Skill 指令文件,遇到异常也重读,防止长期任务中 AI "忘记"执行规范。
15 分钟超时熔断 — 单条用例执行超过 15 分钟自动终止,标记为失败,继续跑下一条。实际测试中,正常用例一般 1-3 分钟就能跑完,15 分钟基本意味着卡死了(比如页面白屏、弹窗阻塞、网络异常等),这时候及时止损比硬等更合理。每条用例的耗时都会精确记录(Unix 时间戳计算,不使用估算值),写进 JSON 结果文件里。
截图策略 — 不在每一步都截图,只在验证预期结果时截图(作为证据)和步骤失败时截图(用于排查)。普通操作步骤不截图,减少 IO 开销。
六、异常处理:8 种常见问题都有预案
实际跑设备测试,总会遇到各种意外。方案对 8 种常见异常都做了明确处理策略:
用例文件不存在 → 跳过,标记 ERROR 用例格式错误 → 跳过,标记 ERROR agent-device 命令失败 → 记录错误,继续后续步骤 页面加载超时 → sleep 5 后重试一次,仍失败则 FAIL 设备无响应 → 检查 ADB 连接状态,尝试重连恢复 UI 快照超时 → 确认已关闭系统动画,sleep 2 后重试 中文输入失败 → 回退到 ADB clipboard 方案 find 定位器失效 → 立即重新快照分析屏幕结构
核心原则:某条用例失败不影响后续用例执行,每条用例的结果独立持久化。
七、精简步骤(_refined.md):越跑越聪明
和 Web 端方案类似,移动端也设计了"精简步骤"机制:
首次执行:AI 逐步摸索,快照分析、定位元素、执行操作,同时记录成功路径。
执行成功后:自动生成 _refined.md 文件,只记录"操作意图"(做什么),不记录定位方式(怎么找元素)。比如:
### 步骤 1:打开应用### 步骤 2:输入账号 15800336655### 步骤 3:输入密码 abc123### 步骤 4:勾选"已阅读并同意"### 步骤 5:点击登录
下次执行同一条用例:如果 _refined.md 存在,优先使用它作为执行参考。AI 不需要重新摸索,直接按步骤执行。
失败不覆盖:如果某次执行失败,不会覆盖之前成功的精简步骤。已有的 _refined.md 保持不动。
八、总结与展望
本方案基于 Claude Code Skill 机制 + agent-device,实现了从测试用例(Markdown/XMind)到 Android 设备自动化执行的完整闭环。核心亮点包括:自然语言用例驱动、语义定位器操作设备、智能引用解析、快照缓存优化、精简步骤自我进化、HTML 可视化报告。
和之前 Web 端方案搭配使用,基本覆盖了 Web + App 双端的 UI 自动化测试需求。
这个方案还有几个方向可以继续深入:
iOS 支持 — 目前只覆盖了 Android 端,下版本计划扩展到 iOS 用例生成与执行彻底串联 — AI 生成用例 → 自动执行 → 自动出报告,整条链路零人工干预 设备农场 — 多设备并行执行,进一步缩短回归测试时间
-END-
👇关注我的公众号👇
扫描下方二维码领取源码资料

欢迎加V相互交流学习
夜雨聆风