Перестал работать GrantPermissionRule

GrantPermissionRule, который я успешно реализовал в своем приложении для Android 3 января 2008 года, больше не работает. Когда я запускаю свои тесты Espresso через Android Studio, эмулятор блокирует ожидание разрешений. Тем не менее, когда я запускаю тесты из командной строки с ./gradlew dist; ./gradlew connectedDebugAndroidTest --stacktrace он не запрашивает разрешения. Примечание. Я выполняю стирание данных из эмулятора вручную перед каждым запуском, чтобы убедиться в правильности теста GrantPermissionRule.

Вот оригинальные ссылки, которые я использовал для реализации GrantPermissionRule: https://www.kotlindevelopment.com/runtime-permissions-espresso-done-right/ https://developer.android.com/reference/android/support/test/rule/GrantPermissionRule.html

Версии в app / build.gradle:

  • com.android.support.test.espresso: эспрессо-ядро: '3.0.1'
  • com.android.support.test: бегун:'1.0.1'

GrantPermissionRule перестал работать как рекламируется для кого-то еще?

2 ответа

Я пытался с помощью

@Rule 
public GrantPermissionRule mRuntimePermissionRule = GrantPermissionRule.grant(Manifest.permission.ACCESS_FINE_LOCATION);

И это не сработало. Предупреждения о разрешениях все еще отображаются, когда я запускаю свои тесты эспрессо. Это работает для меня, хотя:

@Before
public void grantPhonePermission() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        getInstrumentation().getUiAutomation().executeShellCommand(
                "pm grant " + getTargetContext().getPackageName()
                        + " android.permission.ACCESS_FINE_LOCATION");
    }
}

В моем случае, я пытался автоматизировать права Места в тестах Espresso UI на Emulator Pixel 2 API R.

Вариант использования 1:

Когда я добавлял как ACCESS_FINE_LOCATION & ACCESS_COARSE_LOCATION в GrantPermissionRule затем RunTime разрешение всплывающее окно не был автоматически исчезает.

Не работает:

@Rule
@JvmField
val grantPermissionRule: GrantPermissionRule = 
GrantPermissionRule.grant(android.Manifest.permission.ACCESS_FINE_LOCATION, 
android.Manifest.permission.ACCESS_COARSE_LOCATION)

Затем я удалил ACCESS_COARSE_LOCATION из GrantPermissionRule, и автоматизация начала работать.

За работой:

@Rule
@JvmField
val grantPermissionRule: GrantPermissionRule = 
GrantPermissionRule.grant(android.Manifest.permission.ACCESS_FINE_LOCATION) 

Вариант использования 2:

Также ниже реализация работает, как указано выше (неудача / успех).

Не работает:

@Before
fun grantPhonePermission() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        getInstrumentation().uiAutomation.executeShellCommand(
            "pm grant " + getApplicationContext<Context>()
                .packageName
                    + " android.permission.ACCESS_FINE_LOCATION"
        )
        getInstrumentation().uiAutomation.executeShellCommand(
            "pm grant " + getApplicationContext<Context>()
                .packageName
                    + " android.permission.ACCESS_COARSE_LOCATION"
        )
    }
}

За работой:

@Before
fun grantPhonePermission() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        getInstrumentation().uiAutomation.executeShellCommand(
            "pm grant " + getApplicationContext<Context>()
                .packageName
                    + " android.permission.ACCESS_FINE_LOCATION"
        )
    }
}

Проблема, похоже, исчезла, возможно, из-за того, что мне пришлось понизить эмулятор Android, чтобы обойти другую проблему (Вот как понизить эмулятор Android).

Другие вопросы по тегам