UiAutomator环境搭建

1      UiAutomator环境搭建... 2

1.1      工具下载... 2

1.2      安装JDK,配置Java开发环境... 2

1.3      安装ADT,配置Android SDK环境... 3

1.4      配置ANT环境... 3

2      编译运行方式1. 4

2.1      新建测试工程... 4

2.1.1       打开Eclipse. 4

2.1.2       新建一个java工程... 4

2.1.3       新建一个包... 4

2.1.4       工程下增加用于依赖的包(android.jar和uiautomator.jar)... 4

2.1.5       新建测试类,继成UiAutomatorTestCase. 6

2.1.6       编写用例,方法名必须test开头... 6

2.2      编译与运行... 7

2.2.1       打开cmd,进入当前工程的工作路径:cd D:\Eclipse\workspace\DEMO1. 7

2.2.2       创建build文件... 7

2.2.3       修改build文件... 7

2.2.4       开始编译... 7

2.2.5       push文件... 7

2.2.6       运行测试... 8

2.3      快速调试... 9

2.3.1       在Eclipse中导入该工程... 9

2.3.2       将UiAutomatorHelper.java文件拷贝到当前使用工程... 10

2.3.3       在当前工程加入如下代码后,就可以使用Eclipse直接编译运行了... 10

3      编译运行方式2. 11

3.1      新建工程... 11

3.1.1       添加JUnit库... 11

3.1.2       添加Android SDK库... 11

3.1.3       在src中添加包,然后添加class文件(class必须继成UiAutomatorTestCase)... 12

3.2      编译运行... 13

3.2.1       找到SDK的ID.. 13

3.2.2       创建build文件... 13

3.2.3       修改build文件... 13

3.2.4       编译生成jar 14

3.2.5       push并运行jar 14

3.2.6       相对完整的测试case. 14

 

 

 

1      UiAutomator环境搭建

1.1 工具下载

1、     JDK:1.6以上,推荐使用Java SE 7

下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html

2、     Android SDK(API高于15)

                                                        ADT(Android Development Tools-Android,包括了SDK和Eclipse)

3、     Eclipse(安装ADT插件)

ADT下载地址:http://www.androiddevtools.cn/

4、     ANT(Eclipse也包含了)

1.2 安装JDK,配置Java开发环境

1、     安装JDK(默认设置安装)

2、     配置环境变量

n   计算机系统属性->高级->环境变量->新建系统变量JAVA_HOME(变量名:JAVA_HOME; 变量值:JDK的安装目录)

 

n   Path中添加%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

 

n   计算机系统属性->高级->环境变量->新建系统变量CLASSPATH (变量名:CLASSPATH; 变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar)

 

 

3、     验证开发环境是否配置成功

输入:java , javac,java-version 验证

1.3 安装ADT,配置Android SDK环境

1、     将ADT解压到一个目录:如D:

2、     增加ANDROID_HOME环境变量(变量名:ANDROID_HOME; 变量值:SDK的目录,D:\adt-bundle-windows-x86_64-20140702\sdk)

 

3、     配置PATH路径

Path中添加:tools目录和platform-tools目录

%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools

4、     验证环境是否配置成功

输入adb验证platform-tools

输入android list验证tools

1.4 配置ANT环境

1、     增加ANT_HOME环境变量(变量名:ANT_HOME; 变量值:eclipse下ant.bat的上层目录,D:\adt-bundle-windows-x86_64-20140702\eclipse\plugins\org.apache.ant_1.8.3.v201301120609)

 

2、     配置PATH路径

Path中添加:%ANT_HOME%\bin

3、     验证环境是否配置成功

输入ant 验证

2      编译运行方式1

2.1 新建测试工程

2.1.1  打开Eclipse

进入ADT目录,打开Eclipse

2.1.2  新建一个java工程

新建DEMO1工程

 

2.1.3   新建一个包

新建com.jikexueyuan包

 

2.1.4   工程下增加用于依赖的包(android.jar和uiautomator.jar)

1、     新建一个目录libs,用于存放依赖的包

 

2、     复制android.jar和uiautomator.jar,直接在Eclipse里的libs下点右键->粘贴,拷贝到libs目录下

 

3、     增加到build path

将libs下的文件选中,右键->Build Path->Add to Build Path

 

2.1.5  新建测试类,继成UiAutomatorTestCase

 

 

2.1.6  编写用例,方法名必须test开头

package com.jikexueyuan;

 

import com.android.uiautomator.core.UiDevice;

import com.android.uiautomator.testrunner.UiAutomatorTestCase;

 

public class Test extends UiAutomatorTestCase {

    public void testDemo(){

       UiDevice.getInstance().pressHome();//按home键

    }

 

}

2.2 编译与运行

 

2.2.1  打开cmd,进入当前工程的工作路径:cd D:\Eclipse\workspace\DEMO1

 

2.2.2  创建build文件

android create uitest-project -n <jar name> -t 1 -p <workspace path>

android create uitest-project -n demo -t 1 -p D:\Eclipse\workspace\DEMO1

-n后面跟的是最终发布的jar名字

-t参数后面跟的是需要编译的sdk在电脑中的id编号,可以通过Android list来查询

-p跟的是工作空间路径

2.2.3  修改build文件

进入工作空间,打开build.xml文件

将第二行的help修改为build

 

2.2.4  开始编译

ant –buildfile <build.xml 文件路径>

ant -buildfile build.xml

2.2.5  push文件

adb push <path_to_output_jar> /data/local/tmp/

adb push D:/Eclipse/workspace/DEMO1/bin/demo.jar /data/local/tmp/

2.2.6  运行测试

adb shell uiautomator runtest <jar name>-c <包名>.<类名>[#test name]

adb shell uiautomator runtest demo.jar -c com.jikexueyuan.Test

adb shell uiautomator runtest <JARS> -c <CLASSES> [options]

子命令

操作参数

描述

runtest

<JARS>

指定运行的 jar包文件名,位于路径/data/local/tmp/下

-c <CLASSES>

测试一个类下的所有用例格式:package_name.class_name

测试特定的某个方法:package_name.class_name#method_name

可指定多个 –c  

如果不指定,则运行整个jar包下的所有用例

--nohup

指定此参数,可断开PC进行运行测试用例

-e <NAME> <VALUE>

传入一个键值对到测试程序中,可用于一些需要变化的参数的传入

-c演示

增加如下代码:

package com.jikexueyuan;

import android.os.RemoteException;

import com.android.uiautomator.core.UiDevice;

import com.android.uiautomator.testrunner.UiAutomatorTestCase;

public class Test extends UiAutomatorTestCase {

         public void testHome(){

                   UiDevice.getInstance().pressHome();//按home键

                   sleep(2000);

         }

         public void testMenu(){

                   UiDevice.getInstance().pressHome();//按菜单键

                   sleep(2000);

         }

         public void testRecent() throws RemoteException{

                   UiDevice.getInstance().pressRecentApps();//打开最近运行的App历史

                   sleep(2000);

         }

}

编译:

D:\Eclipse\workspace\DEMO1>ant -buildfile build.xml

  • push:

D:\Eclipse\workspace\DEMO1>adb push  D:\Eclipse\workspace\DEMO1\bin\demo.jar /da

ta/local/tmp

  • 运行:

D:\Eclipse\workspace\DEMO1>adb shell uiautomator runtest demo.jar -c com.jikexue

yuan.Test#testRecent -c com.jikexueyuan.Test#testMenu -c com.jikexueyuan.Test#testHome

-e演示

package com.jikexueyuan;

import android.os.Bundle;

import android.os.RemoteException;

import com.android.uiautomator.core.UiDevice;

import com.android.uiautomator.testrunner.UiAutomatorTestCase;

 

public class Test extends UiAutomatorTestCase {

         public void testDemo(){

                   UiDevice.getInstance().pressHome();//按home键

                   sleep(2000);

                   Bundle bundle= getParams();

                   String phone=bundle.getString("phone");

                   System.out.println("PHONE:"+phone);

         }

         public void testMenu(){

                   UiDevice.getInstance().pressHome();//按菜单键

                   sleep(2000);

         }

         public void testRecent() throws RemoteException{

                   UiDevice.getInstance().pressRecentApps();//打开最近运行的App历史

                   sleep(2000);

         }

}

编译:

D:\Eclipse\workspace\DEMO1>ant -buildfile build.xml

  • push:

D:\Eclipse\workspace\DEMO1>adb push  D:\Eclipse\workspace\DEMO1\bin\demo.jar /da

ta/local/tmp

  • 运行:

D:\Eclipse\workspace\DEMO1>adb shell uiautomator runtest demo.jar -c com.jikexue

yuan.Test#testRecent -c com.jikexueyuan.Test#testMenu -c com.jikexueyuan.Test#te

stDemo -e phone 888888888888888888888

2.3 快速调试

将繁琐的创建build文件,修改build,编译、push、运行步骤转换成脚本

打开https://github.com/网站,搜索uiautomatorhelper,下载UiAutomatorHelper-master.zip工程

2.3.1  在Eclipse中导入该工程

 

 

2.3.2  将UiAutomatorHelper.java文件拷贝到当前使用工程

 

2.3.3  在当前工程加入如下代码后,就可以使用Eclipse直接编译运行了

    /**

     * 需求:UI工程调试构造器,输入jar包名,包名,类名,用例名

     * @param jarName

     * @param testClass

     * @param testName

     * @param androidId

     */

    public static void main(String[] args) {

        String jarName="HYC";

        String testClass="com.bliss.song";

        String testName="testOpenHYC";

        String androidId="1";

        new UiAutomatorHelper(jarName, testClass, testName,androidId);

    }

3      编译运行方式2

3.1 新建工程

用Eclipse新建JavaProject,注意,不是AndroidProject!

3.1.1  添加JUnit库

next->Libraries->AddLibrary

 

3.1.2  添加Android SDK库

AddExternalJARs:

找到路径D:\adt-bundle-windows-x86_64-20140702\sdk\platforms\android-20下面的android.jar和uiautomator.jar添加进来:

所有库添加完应该是这个样子:

 

3.1.3  在src中添加包,然后添加class文件(class必须继成UiAutomatorTestCase)

 

文件内容为:

package jinguo;

import com.android.uiautomator.core.UiObject;

import com.android.uiautomator.core.UiObjectNotFoundException;

import com.android.uiautomator.core.UiScrollable;

import com.android.uiautomator.core.UiSelector;

import com.android.uiautomator.testrunner.UiAutomatorTestCase;

public class song extends UiAutomatorTestCase {

         public void testDemo()throws UiObjectNotFoundException{

                   getUiDevice().pressHome();

                   //进入设置菜单

                   UiObject settingApp=new UiObject(new UiSelector().text("Settings"));

                   settingApp.click();

                   //休眠3秒

                   try{

                            Thread.sleep(3000);

                   }catch(InterruptedException e1){

                   //TODO Auto-generated catch block

                            e1.printStackTrace();

                   }

                   //进入语言和输入法设置

                   UiScrollable settingItems=new UiScrollable(new UiSelector().scrollable(true));

                   UiObject languageAndInputItem=settingItems.getChildByText(

                                     new UiSelector().text("Language&input"),"Language&input",true);

                   languageAndInputItem.clickAndWaitForNewWindow();

                   }

}

上面工程路径在D:\Eclipse\workspace\Bliss,类全名为jinguo.song,至于具体的作用我们现在不去关心。

3.2 编译运行

3.2.1  找到SDK的ID

CMD进入D:\adt-bundle-windows-x86_64-20140702\sdk\platforms\android-20目录下,

运行命令:android list

 

查看对应android版本的SDK的ID值,当前是1;

3.2.2  创建build文件

仍然在\Android-sdk\tools\目录下,运行命令:(如果环境变量配置好,则不需要再sdk目录下运行)

android create uitest-project -n <jar name> -t 1 -p <workspace path>

D:\Eclipse\workspace\Bliss>android create uitest-project -n bliss -t 1 -p D:\Eclipse\workspace\Bliss

 

3.2.3  修改build文件

进入工作空间,打开build.xml文件

将第二行的help修改为build

 

3.2.4  编译生成jar

CMD进入项目的工程目录,然后运行ant build,将使用ant编译生成jar,成功将会提示:

ant -buildfile build.xml

 

然后会在bin目录下生成jar文件。

3.2.5  push并运行jar

adb push <jar文件路径> data/local/tmp

D:\Eclipse\workspace\Bliss>adb push D:\Eclipse\workspace\Bliss\bin\bliss.jar /data/local/tmp

adb shell uiautomator runtest <jar文件名> -c <工程中的类名,包含包名>

比如:D:\Eclipse\workspace\Bliss>adb shell uiautomator runtest bliss.jar -c jinguo.song

然后就能看到手机会按照Runner中的步骤自动执行。具体效果就是,进入设置菜单,然后再进入“语言和输入法”菜单

3.2.6  相对完整的测试case

下面就用一个相对连贯的测试用例来串一下上面的知识点,

这个Case是切换手机语言,中文->英文,英文->中文

package jinguo;

 

import com.android.uiautomator.core.UiObject;

import com.android.uiautomator.core.UiObjectNotFoundException;

import com.android.uiautomator.core.UiScrollable;

import com.android.uiautomator.core.UiSelector;

import com.android.uiautomator.testrunner.UiAutomatorTestCase;

 

public class song extends UiAutomatorTestCase {

    public void setEnglishLan()throws UiObjectNotFoundException{

        //进入操作前,先用Home键进入待机界面 

                getUiDevice().pressHome();

               

                //进入“系统设置”菜单。也可以通过点击menu按键来实现 

                UiObject settingApp = new UiObject(new UiSelector().text("设定")); 

                settingApp.click(); 

 

                //等待3秒 

                try

                    Thread.sleep(3000); 

                } catch (InterruptedException e1) { 

                    e1.printStackTrace(); 

                } 

                //选择 "我的设备"

                UiObject setMydevice = new UiObject(new UiSelector().text("我的设备")); 

                setMydevice.clickAndWaitForNewWindow();

                //用滚动的方式查找并进入“语言和输入法设置”菜单 

                UiScrollable settingItems = new UiScrollable( 

                        new UiSelector().scrollable(true)); 

                UiObject languageAndInputItem = settingItems.getChildByText( 

                        new UiSelector().text("语言和输入"), "语言和输入", true); 

                languageAndInputItem.clickAndWaitForNewWindow(); 

 

                //找到“语言”的可点击项(因为当前是中文环境) 

                UiObject setLanItem = new UiObject(new UiSelector().text("语言")); 

                setLanItem.clickAndWaitForNewWindow(); 

 

                //Log输出 

                System.out.println("setLanItem-->" + setLanItem.getPackageName()); 

 

                //找到“English”的可点击项,点击

                UiObject setEnglishItem = new UiObject(new UiSelector().text("English")); 

                setEnglishItem.clickAndWaitForNewWindow();  

                 

                //点击返回键,回到待机界面 

                getUiDevice().pressHome();

        }

    public void setChineseLan() throws UiObjectNotFoundException { 

        //进入操作前,先用Home键进入待机界面 

        getUiDevice().pressHome();

       

        //进入“系统设置”菜单。也可以通过点击menu按键来实现 

        UiObject settingApp = new UiObject(new UiSelector().text("Settings")); 

        settingApp.click(); 

 

        //等待3秒 

        try

            Thread.sleep(3000); 

        } catch (InterruptedException e1) { 

            e1.printStackTrace(); 

        }

        //选择 "我的设备"

        UiObject setMydevice = new UiObject(new UiSelector().text("My device")); 

        setMydevice.clickAndWaitForNewWindow();

 

        //用滚动的方式查找并进入“语言和输入法设置”菜单 

        UiScrollable settingItems = new UiScrollable( 

                new UiSelector().scrollable(true)); 

 

        UiObject languageAndInputItem = settingItems.getChildByText( 

                new UiSelector().text("Language and input"), "Language and input", true); 

        languageAndInputItem.clickAndWaitForNewWindow(); 

 

        //找到“English”的可点击项(因为当前是英文环境) 

        UiObject setLanItem = new UiObject(new UiSelector().text("Language")); 

        setLanItem.clickAndWaitForNewWindow(); 

 

        //Log输出 

        System.out.println("setLanItem-->" + setLanItem.getPackageName()); 

 

        //找到中文选项,点击

        UiObject setChineseItem = new UiObject(new UiSelector().text("中文")); 

        setChineseItem.clickAndWaitForNewWindow();

         

        //点击返回键,回到待机界面 

        getUiDevice().pressBack(); 

        getUiDevice().pressBack(); 

        getUiDevice().pressBack();

    }

    public void hyc() throws UiObjectNotFoundException { 

        //进入操作前,先用Home键进入待机界面 

        getUiDevice().pressHome();

       

        //进入“系统设置”菜单。也可以通过点击menu按键来实现 

        UiObject settingApp = new UiObject(new UiSelector().text("货运诚")); 

        settingApp.click(); 

 

    }

}

 

 

posted @ 2020-06-10 14:14  will__DeDe  阅读(283)  评论(0编辑  收藏  举报