我有一个使用READ_CONTACTS权限的应用程序。一旦应用程序启动,就会要求此权限。我希望在使用浓缩咖啡执行自动化测试时自动接受此权限。我尝试过使用GrantPermissionRule
。该规则适用于我需要的所有其他权限,但不适用于READ_CONTACTS。我也尝试过使用UiAnimator,但这也没用。我在每次测试开始时尝试使用UiAnimator方法,但在手动接受屏幕上显示的权限之前,它不会运行。如何自动接受此权限?
public static void allowPermissionsIfNeeded() {
if (Build.VERSION.SDK_INT >= 23) {
UiDevice mDevice = UiDevice.getInstance(getInstrumentation());
UiObject rational = mDevice.findObject(new UiSelector().text("Yes"));
if (rational.exists()) {
try {
rational.click();
} catch (UiObjectNotFoundException e) {
Timber.e(e, "There is no permissions dialog to interact with ");
}
}
UiObject allowPermissions = mDevice.findObject(new UiSelector().text("Allow"));
if (allowPermissions.exists()) {
try {
allowPermissions.click();
} catch (UiObjectNotFoundException e) {
Timber.e(e, "There is no permissions dialog to interact with ");
}
}
}
}
@Rule
public GrantPermissionRule grantPermissionRule = GrantPermissionRule.grant(
Manifest.permission.READ_CONTACTS,
Manifest.permission.CAMERA,
Manifest.permission.RECORD_AUDIO,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
您可能缺少使用@Before
注释的方法;正如documentation所写:
提供所请求权限的静态工厂方法。
在使用
@Before
注释的任何方法之前,将授予权限但在任何测试方法执行之前。
(我必须承认,我不太了解“但是”那里)。