zoukankan      html  css  js  c++  java
  • 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:EclipseworkspaceDEMO1. 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%in;%JAVA_HOME%jrein

     

    n   计算机系统属性->高级->环境变量->新建系统变量CLASSPATH (变量名:CLASSPATH; 变量值:.;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.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-20140702sdk)

     

    3、     配置PATH路径

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

    %ANDROID_HOME% ools;%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-20140702eclipsepluginsorg.apache.ant_1.8.3.v201301120609)

     

    2、     配置PATH路径

    Path中添加:%ANT_HOME%in

    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:EclipseworkspaceDEMO1

     

    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:EclipseworkspaceDEMO1

    -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:EclipseworkspaceDEMO1>ant -buildfile build.xml

    • push:

    D:EclipseworkspaceDEMO1>adb push  D:EclipseworkspaceDEMO1indemo.jar /da

    ta/local/tmp

    • 运行:

    D:EclipseworkspaceDEMO1>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:EclipseworkspaceDEMO1>ant -buildfile build.xml

    • push:

    D:EclipseworkspaceDEMO1>adb push  D:EclipseworkspaceDEMO1indemo.jar /da

    ta/local/tmp

    • 运行:

    D:EclipseworkspaceDEMO1>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-20140702sdkplatformsandroid-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:EclipseworkspaceBliss,类全名为jinguo.song,至于具体的作用我们现在不去关心。

    3.2 编译运行

    3.2.1  找到SDK的ID

    CMD进入D:adt-bundle-windows-x86_64-20140702sdkplatformsandroid-20目录下,

    运行命令:android list

     

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

    3.2.2  创建build文件

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

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

    D:EclipseworkspaceBliss>android create uitest-project -n bliss -t 1 -p D:EclipseworkspaceBliss

     

    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:EclipseworkspaceBliss>adb push D:EclipseworkspaceBlissinliss.jar /data/local/tmp

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

    比如:D:EclipseworkspaceBliss>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(); 

     

        }

    }

     

     

  • 相关阅读:
    C++ tinyXml直接解析XML字符串
    留言板小程序开发笔记3
    如何去除 gvim 的 acp和 "option omnifunc is not set" 的问题
    如何修改bootstrap模态框的backdrop蒙版区域的颜色?
    Windows下卸载软件时提示 等待先前的卸载完成? 终止 dllhost.exe 进程
    thinkphp中的__DIR__ __ROOT__ __APP__ __MODULE__ APP_PATH LIB_PATH MODULE_PATH 等是在哪里定义的?
    thinkphp中的Ueditor的使用, 以及如何传递编辑器内容到后台?
    留言板小程序开发笔记2
    分页器的js实现代码 bootstrap Paginator.js
    windows的gvim总是报错: +iconv fencview.vim
  • 原文地址:https://www.cnblogs.com/Peng-study/p/13084793.html
Copyright © 2011-2022 走看看