UI Automator + Eclipse + Ant 编译安装运行

1 环境准备

2 创建Eclipse项目

  • 打开Eclispe,创建一个Java Project(项目名:UIAutomatorTestCaseDemo)
  • 增加android.jar,uiautomator.jar到项目的external jar中
    ( jar在本机的如下类似目录:%android_home%\platforms\android-22)
  • 新建一个class(类名:testcasedemo,extend UiAutomatorTestCase),包名为com.lewi.demo

3 生成对应的build.xml文件

找到项目的目录,通过如下命令生成ant需要的build.xml文件。

D:\android>android create uitest-project -n UIAutomatorTestCaseDemo -t 1 -p D:\EclipseWorkspace\UIAutomatorTestCaseDemo
Added file D:\EclipseWorkspace\UIAutomatorTestCaseDemo\build.xml

运行完成后,在Eclispe中刷新项目,会看到新产生的build.xml文件。

4 配置ant targets

右键build.xml,选择Run As…选择,可以配置此项目的Targets。如下图:
这里写图片描述
默认情况,Target只选择了help。根据需要,我选择了help, build, install,test。当运行到test target提示
Launching tests from Ant not supported yet
跳转到%android_home%/tools/ant/uibuild.xml查看到,是以为当前版本不支持ant test。
根据uibuild.xml里面的提示,更新了自己的需要测试内容,再次ant test,测试通过。
更新后的uibuild.xml中test部分如下:

    <target name="test" description="Runs tests">
        <!-- todo: fix this -->
        <!--
        <fail message="Launching tests from Ant not supported yet" />
        -->
         <exec executable="${adb}" failonerror="true">
            <arg line="${adb.device.arg}" />
            <arg value="shell" />
            <arg value="uiautomator" />
            <arg value="runtest" />
            <arg value="${out.filename}" />
            <arg value="-e" />
            <arg value="class" />
            <arg value="com.lewi.demo.testcasedemo" />
        </exec>
    </target>

目前已经搞定ant一键编译,安装和测试。在Eclipse 中,可以通过快捷方式Alt + Shift + X , Q 执行ant。

5 修改测试用例Demo,让其成为一个完成的用例。

  • 需求:通过滑屏解锁手机,然后点击Home键,检查主屏是否出现。
  • testcasedemo代码如下:
package com.lewi.demo;

import android.os.RemoteException;
import com.android.uiautomator.testrunner.UiAutomatorTestCase;
import com.android.uiautomator.core.UiObject;
import com.android.uiautomator.core.UiObjectNotFoundException;
import com.android.uiautomator.core.UiScrollable;
import com.android.uiautomator.core.UiSelector;

public class testcasedemo extends UiAutomatorTestCase {

    public void testDemo() throws UiObjectNotFoundException, InterruptedException, RemoteException {   
        if(!getUiDevice().isScreenOn()){
            getUiDevice().wakeUp();
            getUiDevice().swipe(250, 850, 250, 100, 2);
        }

        getUiDevice().waitForWindowUpdate(null, 2000);
        getUiDevice().pressHome();

        UiObject clockValidation = new UiObject(new UiSelector().packageName("com.miui.home")); 
        assertTrue("could not find clock",clockValidation.exists());    
    }
}

使用ant进行build, install,test后,输出如下:

......
compile:
    [javac] Compiling 1 source file to D:\EclipseWorkspace\UIAutomatorTestCaseDemo\bin\classes
-post-compile:
-dex:
      [dex] input: D:\EclipseWorkspace\UIAutomatorTestCaseDemo\bin\classes
      [dex] Found Deleted Target File
      [dex] Converting compiled files and external libraries into D:\EclipseWorkspace\UIAutomatorTestCaseDemo\bin\classes.dex...
-post-dex:
-jar:
      [jar] Building jar: D:\EclipseWorkspace\UIAutomatorTestCaseDemo\bin\UIAutomatorTestCaseDemo.jar
-post-jar:
build:
install:
     [exec] 666 KB/s (1364 bytes in 0.002s)
test:
     [exec] open: Permission denied
     [exec] open: Permission denied
     [exec] INSTRUMENTATION_STATUS: numtests=1
     [exec] INSTRUMENTATION_STATUS: stream=
     [exec] com.lewi.demo.testcasedemo:
     [exec] INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner
     [exec] INSTRUMENTATION_STATUS: test=testDemo
     [exec] INSTRUMENTATION_STATUS: class=com.lewi.demo.testcasedemo
     [exec] INSTRUMENTATION_STATUS: current=1
     [exec] INSTRUMENTATION_STATUS_CODE: 1
     [exec] INSTRUMENTATION_STATUS: numtests=1
     [exec] INSTRUMENTATION_STATUS: stream=.
     [exec] INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner
     [exec] INSTRUMENTATION_STATUS: test=testDemo
     [exec] INSTRUMENTATION_STATUS: class=com.lewi.demo.testcasedemo
     [exec] INSTRUMENTATION_STATUS: current=1
     [exec] INSTRUMENTATION_STATUS_CODE: 0
     [exec] INSTRUMENTATION_STATUS: stream=
     [exec] Test results for WatcherResultPrinter=.
     [exec] Time: 3.603
     [exec] OK (1 test)
     [exec] INSTRUMENTATION_STATUS_CODE: -1
BUILD SUCCESSFUL
Total time: 7 seconds

当我们使用Ecllipse调试通过后,我们也可以使用命令行去部署和运行:
上次Jar包到测试设备: adb push UIAutomatorTestCaseDemo.jar /data/local/tmp
运行测试用例: adb shell uiautomator runtest UIAutomatorTestCaseDemo.jar -c com.lewi.demo.testcasedemo

6 Reference

http://android.toolib.net/tools/testing/testing_ui.html#creating

7 Todo List:

  • 如何处理中文信息
  • 如何把Demo代码共享到github
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值