关于使用androidx.test.core.graphics.writeToTestStorage下载截图的技术咨询
嘿,我之前迁移测试截图工具的时候也踩过这个坑,咱们一个个来解决你的问题:
1. 设备上的截图存储路径
设备端的截图默认存在这个路径:/sdcard/Android/data/<你的应用包名>/files/test_output/screenshots/
要是你用的是Android 11及以上的设备,直接用系统文件管理器可能看不到这个目录(因为Scoped Storage限制),可以通过adb命令查看:
adb shell ls /sdcard/Android/data/<你的应用包名>/files/test_output/screenshots/
2. 本地构建目录的截图存储位置
本地构建目录里,截图会默认存放在:app/build/outputs/androidTest-results/connected/<设备ID>/screenshots/
这个路径里的<设备ID>是你测试用的模拟器或真机的ID,你可以通过adb devices命令查到。如果是用云测试服务的话,路径可能会略有不同,但核心都在androidTest-results/connected这个大目录下。
3. 用Gradle触发截图下载
Android Gradle插件(AGP)其实默认会在你跑完connectedAndroidTest任务后,自动把设备上的测试输出(包括截图)拉到本地构建目录。如果没自动触发,试试这些方法:
- 手动执行完整的测试任务:
./gradlew connectedAndroidTest - 单独执行拉取测试输出的任务(AGP 7.0+支持):
./gradlew pullTestOutput
另外要注意,别在build.gradle里设置testOptions.instrumentationRunnerArguments.clearPackageData = true,这个参数会清除测试输出目录,导致截图拉取不到。
4. 不用Gradle下载截图的方法
完全可以!直接用adb命令就能搞定。先确认设备上的截图路径,然后执行拉取命令:
adb pull /sdcard/Android/data/<你的应用包名>/files/test_output/screenshots/ ./本地目标文件夹/
比如你想把截图拉到当前目录的local-screenshots文件夹里,就可以写:
adb pull /sdcard/Android/data/com.example.myapp/files/test_output/screenshots/ ./local-screenshots/
最后提个小细节:你的代码里screenshot.writeToTestStorage (name)多了个空格,应该写成screenshot.writeToTestStorage(name),虽然大概率是输入笔误,但避免因为这个小问题导致执行异常~
内容来源于stack exchange

