我正在使用Karumi的镜头插件(https://github.com/karumi/shot)从我的测试中截取屏幕截图然后使用facebook的库进行比较:http://facebook.github.io/screenshot-tests-for-android/
当使用大于23的api运行时,库存在问题,因为它需要WRITE_EXTERNAL_STORAGE权限,因为api 23,在测试期间授予权限不是一项简单的任务。
但是在espresso 3.0中添加了GrantPermissionRule,通过这种方式,您可以轻松地将权限设置为执行测试。
好吧,我添加了规则:
@Rule @JvmField
val grantPermissionRule: GrantPermissionRule = GrantPermissionRule.grant(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
使用以下代码截取屏幕截图:
Screenshot.snapActivity(activityTestRule.activity).record()
我有一个运行的自定义TestRunner:
override fun onCreate(args: Bundle) {
super.onCreate(args)
ScreenshotRunner.onCreate(this, args)
}
override fun finish(resultCode: Int, results: Bundle) {
ScreenshotRunner.onDestroy()
super.finish(resultCode, results)
}
但是当我执行测试时,我收到以下错误:
java.lang.RuntimeException: Failed to create the directory for screenshots. Is your sdcard directory read-only?
at com.facebook.testing.screenshot.internal.ScreenshotDirectories.getSdcardDir(ScreenshotDirectories.java:66)
答案 0 :(得分:1)
插件无法尝试将屏幕截图保存在API> = 23中,因为必须在测试APK中授予权限,而不是测试中的APK。使用名为grant permission test rule的规则不提供此功能。官方Facebook库不支持此功能,我们暂时不支持:(
我也在GitHub存储库https://github.com/Karumi/Shot/issues/19#issuecomment-328334528
中回答了您的问题答案 1 :(得分:0)
尝试在测试期间在清单中使用 android:requestLegacyExternalStorage="true"
。
完成后不要忘记删除它