我正在使用eclipse编写UIAutomator测试并在命令行上执行以下测试来运行它们,如网上的几个地方所述:
android create uitest-project -n myUITest -t 2 -p C:\Users\JohnDoe\workspace\myUITest
ant build
adb push bin\myUITest.jar /data/local/tmp
adb shell uiautomator runtest myUITest.jar -c Tests.Test1
但是,我最近将测试代码迁移到Android Studio以使用Android)Junit4,拿起uiautomator 2,并且所有内容都集成到一个地方(adb监视器,构建等)。 我按照以下步骤将以下内容添加到app / source / Test下的gradle文件中。到现在为止还挺好。
dependencies {
compile 'com.google.guava:guava:18.0'
// Testing-only dependencies
// Force usage of support annotations in the test app, since it is internally used by the runner module.
androidTestCompile 'com.android.support:support-annotations:23.0.1'
androidTestCompile 'com.android.support.test:runner:0.4.1'
// UiAutomator Testing
androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
androidTestCompile 'org.hamcrest:hamcrest-integration:1.3'
}
android {
compileSdkVersion 23
buildToolsVersion '23.0.1'
defaultConfig {
applicationId "com.example.android.testing.uiautomator.BasicSample"
minSdkVersion 19
targetSdkVersion 23
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
运行测试时,我可以进行gui测试,如唤醒scree,轻扫,触摸但是我发现我无法通过getRuntime.exec进行shell事件来模仿低级输入(按下物理按钮)像之前一样。运行该代码时没有任何反应。 经过进一步研究,我发现executeShellCommand(String命令)是在21级添加的新API,提供了该功能。但是,被测设备正在运行 kit kat(api level 19)。
// Runtime.getRuntime used to work when working under eclipse before migrating to android studio/uiautomator 2
Runtime.getRuntime().exec("sendevent /dev/input/eventX 1 678 1"); // some low level event
有没有办法运行shell命令或发送低级/原始输入事件,因为看起来通过Runtime.getRuntime
发送shell命令似乎在使用UIAutomator2和android studio时似乎没有用,我不相信我可以使用UIAutomation executeShellCommand
,因为我的设备正在运行android kit kat(api 19)。
我花了一天时间浏览帖子,但无法找到解决方案。任何帮助/指导将不胜感激。
答案 0 :(得分:1)
不幸的是,这是不可能的。如您所述,在API级别21中添加了以shell用户身份执行命令的API。在旧版平台上无法使用此功能。