Teaching Claude to QA a Mobile App

AI Mobile Testing Claude ⭐⭐⭐⭐⭐

Christopher Meiklejohn 的深度实践:用 Claude 测试 iOS 和 Android 移动应用 QA 自动化的实战经验。

核心发现

⏱️ 时间对比: Android 90分钟完成,iOS 超过6小时完成

关键亮点

1. Android: 相对简单

  • 连接问题: Android 模拟器中 localhost 指代模拟器本身,需要用 adb reverse 解决
  • CDP 协议: Capacitor 应用运行在 Android WebView 中,暴露 Chrome DevTools Protocol socket
  • 认证方式: 通过 WebSocket 注入 JWT 到 localStorage,无需 UI 交互
  • 导航: 直接设置 window.location.href,无需坐标猜测
  • 屏幕截图: adb shell screencap 捕获屏幕

2. iOS: 噩梦难度

Apple 的封闭性: "Apple 给你一扇锁着的门和一张写着'请用 Xcode'的纸条"
  • 无法输入 @ 符号: AppleScript 发送 Shift+2 被解释为快捷键,修改后端支持用户名登录
  • 无法关闭原生对话框: iOS 通知对话框无法通过任何方式关闭,最终直接写入 TCC.db 权限数据库
  • 坐标导航困难: AppleScript/idb/cliclick 各种方法准确率都不高,最终用 ui_describe_point 探测
  • 无 CDP 支持: Apple 的 WKWebView 不暴露 DevTools Protocol,只能用私有方案

3. 开发者教训

  • CDP over Taps: 能用浏览器自己的调试协议就不坐标猜测
  • 测量,不要猜测: 用 accessibility API 查询按钮位置,而非假设坐标
  • 保持隔离: 在 git worktree 中工作,不要跨越边界
  • 推送前测试: "push and pray" 是危险的

技术细节

# Android CDP 连接
WV_SOCKET=$(adb shell "cat /proc/net/unix" | \
 grep webview_devtools_remote | \
 grep -oE 'webview_devtools_remote_[0-9]+' | head -1)
adb forward tcp:9223 localabstract:$WV_SOCKET
curl http://localhost:9223/json
# Android 认证 (一行代码)
ws.send('{"method":"Runtime.evaluate","params":{"expression":"localStorage.setItem(\'token\',\'xxx\')"}}')

核心洞察

"Android 给你一个 WebSocket 说'这是浏览器,想做什么都行'。iOS 给你一扇锁着的门和一张写着'请用 Xcode'的纸条。"

这是 2026 年移动端 AI 测试自动化的第一手深度报告,展示了在 Apple 封闭生态系统中工作的真实挑战。

链接