You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用CodeceptJS Appium测试安卓iOS拍照录像或模拟预存媒体

CodeceptJS+Appium 拍照/录像功能测试方案

一、拍照后确认/取消按钮无法操作问题解决

  • 核心原因:触发拍照后当前界面切换为系统相机应用的原生界面,需要针对系统相机的UI元素做定位操作,不同厂商/系统版本的相机元素定位符存在差异,需要提前用Appium Inspector抓取对应元素的resource-id/xpath。
  • 操作步骤:
    1. 触发拍照后先加显性等待,确保相机界面完全加载
    2. 直接通过底层driver定位相机的确认/取消按钮即可,以小米MIUI系统为例示例代码:
const driver = await appium.getDriver()
// 触发拍照
await driver.sendDeviceKeyEvent(27)
// 等待相机确认按钮加载,最长等待5秒
await driver.waitForElementByAndroidUIAutomator('new UiSelector().resourceId("com.android.camera:id/done_button")', 5000)
// 点击确认按钮
await driver.elementByAndroidUIAutomator('new UiSelector().resourceId("com.android.camera:id/done_button")').click()
// 如果要点击取消就替换resourceId为com.android.camera:id/cancel_button
  • 注意事项:如果是iOS设备,系统相机的确认按钮accessibility id一般为Use Photo,直接定位该元素即可。

二、模拟调用预存照片/视频测试方案

该方案不需要操作相机实时拍摄,稳定性更高,适合自动化测试场景:

  • 操作步骤:
    1. 提前准备好测试用的照片/视频文件,存放在测试执行机器的本地目录
    2. 测试开始前通过adb命令将媒体文件推送到设备的相册目录,同时触发系统相册刷新,示例代码:
// 执行adb推送文件到设备DCIM目录,替换本地文件路径和设备路径即可
await appium.executeShell('adb push /本地测试文件路径/test.jpg /sdcard/DCIM/test.jpg')
// 发送广播刷新相册,让系统识别到新推送的媒体文件
await appium.executeShell('adb shell am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file:///sdcard/DCIM/test.jpg')
  1. 后续触发App的选图/选视频操作时,直接定位对应预存的测试文件选择即可。
  • 注意事项:需要在启动Appium服务时添加--allow-insecure=adb_shell参数,才有权限执行adb shell命令。

内容的提问来源于stack exchange,提问作者Kyryl Zotov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 12:21:04