我一直在为我的应用程序开发自动化测试,但是,我们已经达到了必须在应用程序环境之外更改选项的程度。为此,我们决定使用最新的UIAutomator v2。通过这样做,我们可以在我们的应用程序和UI Automator中使用espresso测试来进行系统弹出或在同一测试中更改设置。 此时的问题是我们必须为合同目的维护最低版本16。这使得无法使用UIAutomator v2。 编译器本身提出了一个解决方案:
Suggestion: use tools:overrideLibrary="android.support.test.uiautomator.v18" to force usage
我当前的gradle相关gradle配置:
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
// default apk name (to be overriden)
project.archivesBaseName = "AwessomeApp";
android.enforceUniquePackageName=false
defaultConfig {
String charPrefix = "AWS"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode appVersion.getCode()
versionName appVersion.getName()
applicationId "pt.company.awesome"
testApplicationId "pt.company.test"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
但是,它不起作用,可能是因为我们使用gradle通过根项目设置了minSdk。如果我将项目版本提升到18,它可以完美无缺地工作。在这一点上,我不知道如何解决这个问题。是否可以做一些像设置不同的minSdk测试或味道的东西?
答案 0 :(得分:4)
好的,我终于设法解决了这个问题。我不知道它是否是最好的解决方案,但它是我能找到的唯一解决方案。
/**
* Task to add UIAutomator for Test builds and tasks
*/
task addUIAutomatorDependency(dependsOn: ['taskThatNeedsLowerSdk1', 'taskThatNeedsLowerSdk2']) {
rootProject.minSdkVersion = 18
dependencies{
androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
}
}
subprojects { subproject ->
afterEvaluate{
if((subproject.plugins.hasPlugin('android') || subproject.plugins.hasPlugin('android-library'))) {
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
}
}
}
}
如果有更好的解决方案,请告诉我。
修改强> 更好的解决方案是在src / AndroidTest / AndroidManifest.xml中添加AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="pt.bla.blablabla">
<uses-sdk android:targetSdkVersion="22" android:minSdkVersion="16"
tools:overrideLibrary="android.support.test.uiautomator.v18"/>
</manifest>
请注意,该软件包应与原始应用程序相同。