Android Espresso测试授予权限

问题描述 投票:0回答:1

我有一个使用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);
android android-espresso
1个回答
0
投票

您可能缺少使用@Before注释的方法;正如documentation所写:

提供所请求权限的静态工厂方法。

在使用@Before注释的任何方法之前,将授予权限

但在任何测试方法执行之前。

(我必须承认,我不太了解“但是”那里)。

© www.soinside.com 2019 - 2024. All rights reserved.