如何在使用uiautomator和espresso执行AndroidTest之前在Android设备上设置允许模拟位置?

时间:2016-09-28 16:35:17

标签: android testing location android-espresso

基本上每次我必须执行使用模拟位置提供程序的AndroidTest时,我需要手动选中设备模拟器上的框:设置 - >模拟地点。如何直接从android测试自动执行此任务?有没有办法使用espresso / uiautomator /其他东西?

1 个答案:

答案 0 :(得分:2)

我设法以我想要的方式做到了。感谢评论中发布的链接。我在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启动应用程序之前运行任务,则需要在运行编辑"运行"之前添加它。组态。