UIAutomator 2在运行API级别低于21

时间:2016-03-05 19:38:43

标签: android eclipse shell uiautomator android-uiautomator

我正在使用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)。

我花了一天时间浏览帖子,但无法找到解决方案。任何帮助/指导将不胜感激。

1 个答案:

答案 0 :(得分:1)

不幸的是,这是不可能的。如您所述,在API级别21中添加了以shell用户身份执行命令的API。在旧版平台上无法使用此功能。