使用Spoon 2.0.0进行Android UI测试时创建输出目录失败求助
解决Spoon 2.0.0快照在API27模拟器上截图目录创建失败的问题
嘿,这个权限坑我之前在API26+的模拟器上也踩过,结合你说的情况(API19正常、API27报错),核心就是Android 6.0之后的权限模型变化,加上Spoon快照版本没做好适配。给你几个靠谱的解决思路,按顺序试:
先搞定动态权限申请:
API23开始,WRITE_EXTERNAL_STORAGE是危险权限,必须主动申请。用Espresso的GrantPermissionRule最省心,在测试类里加个Rule就行:import android.Manifest; import androidx.test.rule.GrantPermissionRule; public class YourScreenShotTest { @Rule public GrantPermissionRule storagePerm = GrantPermissionRule.grant(Manifest.permission.WRITE_EXTERNAL_STORAGE); // 你的SpoonRule和测试方法... }这个Rule会自动帮你弹权限请求并授权,不用手动处理弹窗。
检查Manifest权限声明:
别忘在主App的AndroidManifest.xml里加上权限:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" />测试模块的Manifest如果有单独配置,也最好补上这条。
换用应用私有存储目录(绕开外部权限):
如果动态权限还是不行,大概率是API27对公共外部目录的访问限制更严。你可以让Spoon把截图存到应用的私有外部目录,这个目录不需要额外权限就能访问。
要么在gradle里配置:spoon { sdCardPath = "${android.applicationVariants.debug.applicationInfo.dataDir}/spoon-screenshots" }要么在测试代码里动态设置:
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); File screenshotDir = new File(appContext.getExternalFilesDir(null), "spoon-screenshots"); Spoon.setOutputDirectory(screenshotDir.getAbsolutePath());排查Spoon快照版本的问题:
2.0.0快照可能存在未修复的API适配bug,你可以试试:- 切到Spoon稳定版(比如1.7.1)验证是否是快照的问题
- 看看Spoon的社区有没有类似的issue反馈,说不定有临时补丁
我之前就是用「动态权限+私有目录」的组合解决了API28上的同款问题,你可以先试试前两步,应该能解决大部分情况。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

