5月27日 21:22
Appium 的 Desired Capabilities 是什么?
Appium 的 Desired Capabilities 是一组键值对,用于告诉 Appium Server 如何配置自动化测试会话——包括在哪个平台、哪台设备、启动哪个应用、使用哪个自动化引擎。客户端以 JSON 格式发送这些参数,服务端据此创建对应的测试环境并返回 session ID。
核心参数有哪些?
必须掌握的几个关键参数:
- platformName:目标平台,值为 Android / iOS / Windows,必填
- deviceName:设备名称,真机或模拟器均可,必填
- automationName:自动化引擎,Android 用 UiAutomator2,iOS 用 XCUITest
- app:待测应用的路径或远程 URL(.apk / .ipa)
json{ "platformName": "Android", "deviceName": "Pixel 5", "automationName": "UiAutomator2", "app": "/path/to/app.apk" }
Android 和 iOS 有什么区别?
这是面试高频追问。两者差异主要体现在应用标识和引擎配置上:
Android 专属:用 appPackage 指定包名,用 appActivity 指定启动 Activity。例如 appPackage: "com.example.app"、appActivity: ".MainActivity"。
iOS 专属:用 bundleId 标识应用,真机测试需要配置 xcodeOrgId 和 xcodeSigningId 完成签名,模拟器则设置 udid: "auto" 即可。
引擎选择也不同——Android 默认 UiAutomator2,iOS 默认 XCUITest,选错引擎会直接导致会话创建失败。
noReset 和 fullReset 有什么区别?
- noReset: true — 会话结束后保留应用数据,下次启动不重装,适合调试阶段复用状态
- fullReset: true — 每次会话前卸载应用并重装,确保干净环境,适合持续集成场景
两者互斥,不能同时为 true。面试中常追问"你项目中用的哪个,为什么",回答时要结合实际场景。
常见踩坑点
- appActivity 前缀漏写点号 — 应写
.MainActivity而非MainActivity,否则 Appium 报找不到 Activity - automationName 与平台不匹配 — iOS 用了 UiAutomator2 会直接报错,务必对齐平台
- 真机 udid 填错 — 可通过
adb devices(Android)或 Xcode 设备列表(iOS)确认
追问:如何在多平台项目中管理 Capabilities?
将 Android 和 iOS 配置拆分为独立文件,运行时通过环境变量切换:
javascriptconst caps = process.env.PLATFORM === 'ios' ? require('./ios.config') : require('./android.config');
这样既避免配置混乱,又便于 CI 流水线按平台并行执行。