如何在使用 uiautomator 和 espresso 执行 AndroidTest 之前在 Android 设备上设置允许模拟位置?
How to set Allow Mock Location on Android Device before executing AndroidTest with uiautomator and espresso?
基本上每次我必须执行使用模拟位置提供程序的 AndroidTest 时,我需要手动选中设备模拟器上的复选框:设置--> 模拟位置。如何直接从 android 测试自动执行此任务?有没有办法使用 espresso/uiautomator/something else?
我设法以我想要的方式做到了。感谢评论中发布的链接。我在 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 启动应用程序之前的任务,您需要像以前一样添加它 运行 编辑 "run" 配置。
基本上每次我必须执行使用模拟位置提供程序的 AndroidTest 时,我需要手动选中设备模拟器上的复选框:设置--> 模拟位置。如何直接从 android 测试自动执行此任务?有没有办法使用 espresso/uiautomator/something else?
我设法以我想要的方式做到了。感谢评论中发布的链接。我在 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 启动应用程序之前的任务,您需要像以前一样添加它 运行 编辑 "run" 配置。