我正在为Android编写UI自动化,测试库中有一个方便的@Rule,可以让我抢先授予应用权限,这样在应用上运行UI测试时就不必处理权限对话框。
Android 13(sdk 33)中有一个名为“POST_NOTIFICATIONS”的新权限。我正在测试的应用使用了这一功能,但运行Android 12及更低版本的设备无法识别它。我有一个权限规则,如下所示:
@Rule
@JvmField
var grantPermissionRule: GrantPermissionRule =
grant(
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.POST_NOTIFICATIONS"
)
当我在Android 13设备上运行测试时,它工作得很完美。但当我在Android 12设备上运行时,由于权限管理器试图请求一个不存在的权限,测试立即崩溃。这个未处理的异常来自google的内置测试库代码--GrantPermissionsRule.java
in package androidx.test.rule
当我如下所示更改代码以移除新权限时,它在Android 12上运行正常,但现在当我在Android 13设备上使用此代码时,会出现通知对话框。
@Rule
@JvmField
var grantPermissionRule: GrantPermissionRule =
grant(
"android.permission.ACCESS_FINE_LOCATION"
)
我希望能够在Android 12和Android 13设备上运行测试,而不需要来回更改权限代码。那么我该如何解决这个问题呢?我对java/Kotlin的高级功能了解不多,但似乎没有办法将@Rule Package 在try/catch块中,这样我就可以处理异常并执行经过删节的代码块。这似乎不是一种让@Rule以Android设备版本号为条件的方法,这样我就可以在正确的时间使用正确的权限集。
我需要覆盖内置的androidx库吗?或者可能有一个花哨的Kotlin或Java东西我可以用来有条件地将POST_NOTIFICATIONS
权限添加到我最终在@Rule中使用的权限集?我愿意接受建议。
1条答案
按热度按时间uinbv5nw1#
试试看:
顺便说一句,除非这个规则需要
var
,否则我会使用val
而不是var
。