Facebook的截图测试失败,api大于23

时间:2017-09-09 00:29:07

标签: android android-espresso

我正在使用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)

2 个答案:

答案 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"

完成后不要忘记删除它