Как установить Allow Mock Location на устройстве Android перед выполнением AndroidTest с помощью uiautomator и эспрессо?

По сути, каждый раз, когда мне нужно выполнить AndroidTest, использующий провайдера фиктивного местоположения, мне нужно вручную установить флажок в эмуляторе устройства: Настройки -> фиктивные местоположения. Как автоматизировать эту задачу прямо из теста Android? Есть ли способ использовать эспрессо /uiautomator/ что-то еще?

1 ответ

Решение

Мне удалось сделать это так, как я хотел. Благодаря ссылкам, размещенным в комментариях. Я добавил в свой файл Gradle следующий фрагмент:

task enableMockLocationForTestsOnDevice(type: Exec) {
    Properties properties = new Properties()
    properties.load(project.rootProject.file('local.properties').newDataInputStream())
    def sdkDir = properties.getProperty('sdk.dir')
    def adb = "$sdkDir/platform-tools/adb"
    description 'enable mock location on connected android device before executing any android test'
    commandLine "$adb", 'shell', 'appops', 'set', 'indian.fig.whatsaround', 'android:mock_location', 'allow'
}

afterEvaluate {
    // Note: the app must be already installed on device in order to this to run!
    connectedDebugAndroidTest.dependsOn enableMockLocationForTestsOnDevice
    connectedAndroidTest.dependsOn enableMockLocationForTestsOnDevice
}


// execute android tests before realising a new apk
tasks.whenTaskAdded { task ->
    if (task.name == 'assembleRelease') {
        task.dependsOn('enableMockLocationForTestsOnDevice')
        task.dependsOn('testReleaseUnitTest') // Run unit tests for the release build
        task.dependsOn('connectedAndroidTest') // Installs and runs instrumentation tests for all flavors on connected devices.

    }
}

Если вам также нужно запустить задачу перед запуском приложения через Android Studio, вы должны добавить ее, как и перед запуском редактирования конфигурации "запустить".

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