zoukankan      html  css  js  c++  java
  • UIAutomator环境搭建

     

    1、下载、安装JDK&配置Java环境变量

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

    配置环境变量:

    1、右键我的电脑--属性--高级--环境变量

    2、新建系统变量JAVA_HOME 和CLASSPATH

                       变量名:JAVA_HOME

                       变量值:C:Program FilesJavajdk1.7.0

                       变量名:CLASSPATH

                       变量值:.;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar;

    3、选择“系统变量”中变量名为“Path”的环境变量,双击该变量,把JDK安装路径中bin目录的绝对路径,添加到Path变量的值中,并使用半角的分号和已有的路径进行分隔。

                       变量名:Path

                       变量值:%JAVA_HOME%in;%JAVA_HOME%jrein;

    验证配置是否成功:重新打开控制台输入:java -verison,如果显示Java版本信息表示安装成功。

    2、下载、安装SDK、ADT&配置Android环境变量

    ADT:http://developer.android.com/sdk/index.html

    配置环境变量:

    1、右键我的电脑--属性--高级--环境变量

    2、在系统变量域中新建ANDROID_HOME变量

                      变量名:ANDROID_HOME

                      变量值:E:appiumadt-bundle-windows-x86_64-20131030sdk(根据实际情况而定)

    3、选择“系统变量”中变量名为“Path”的环境变量

                      变量名:Path

                      变量值:“;%Android_Home%uild-toolsandroid-4.4;%Android_Home% ools;%Android_Home%platform-tools”(android-4.4要视情况而定)

    最后结果如图:

    ANDROID_HOME配置如下:

     

    系统变量Path配置如下:

     

     

    3、下载、安装ANT&配置ANT环境变量

    ANT下载地址:http://ant.apache.org

    配置环境变量:

    1、右键我的电脑--属性--高级--环境变量

    2、新建系统变量

                       变量名:ANT_HOME

                       变量值:C:apache-ant-1.8.1

    3、选择“系统变量”中变量名为“Path”和“CLASSPATH”的环境变量

                       变量名:Path

                       变量值:%ANT_HOME%in;

                       变量名:CLASSPATH

                       变量值:%ANT_HOME%lib;

    4、创建UIAutomator工程

    1、打开ADT自带的Eclipse,新建Java Project

    如图:

    2、添加JUnit库

    工程右键Build Path==>Configure Build Path==>Add Library

    如图:

    3、添加android包和uiautomator包

    工程右键Build Path==>Configure Build Path==>Add External JARs

    如图:

    4、新建class,import jar包,编写代码,这部分参见下面案例

    5、运行代码

    ①查看SDK ID

    CMD进入Android-sdk ools目录下,运行命令:android list ,查看对应android版本的SDK的ID值,当前是2;

    ②创建build文件

    在Android-sdk ools目录下,运行命令:android create uitest-project -n <name> -t <android-sdk-ID> -p <path>

    name是生成的jar包的名字,可以自定义,android-sdk-ID即上面看到的2,path是上面创建的工程路径,比如:android create uitest-project -n UIAutomator -t 2 -p d:codeLearnUiAutomator

    运行成功后会在工程的根目录下生成build.xml文件。

    ③编译生成jar

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

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

    ④push并运行jar

    adb push <jar文件路径> data/local/tmp
    adb shell uiautomator runtest <jar文件名> -c <工程中的类名,包含包名>
    比如:
    adb push d:codeLearnUiAutomatorinUiAutomator.jar data/local/tmp
    adb shell uiautomator runtest UiAutomator.jar -c com.UiAutomator

    然后就能看到手机会按照TestDemo中的步骤自动执行。

    5、UIAutomator简单案例

    package com.UIAutomator;
    
    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 TestDemo extends UiAutomatorTestCase {
    	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();  
    	    }  
    	  
    	  
    	    //用滚动的方式查找并进入“语言和输入法设置”菜单  
    	    UiScrollable settingItems = new UiScrollable(  
    	            new UiSelector().scrollable(true));  
    	  
    	  
    	    UiObject languageAndInputItem = settingItems.getChildByText(  
    	            new UiSelector().text("Language & input"), "Language & input",  
    	            true);  
    	    languageAndInputItem.clickAndWaitForNewWindow();  
    	  
    	  
    	    //找到“English”的可点击项(因为当前是英文环境)  
    	    UiObject setLanItem = new UiObject(new UiSelector().text("English"));  
    	    setLanItem.clickAndWaitForNewWindow();  
    	  
    	  
    	    //Log输出  
    	    System.out.println("setLanItem-->" + setLanItem.getPackageName());  
    	  
    	  
    	    //由于无法识别中文,因此我们这里使用坐标去选择“简体中文”项  
    	    getUiDevice().click(350, 250);  
    	      
    	    //点击返回键,回到待机界面  
    	    getUiDevice().pressBack();  
    	    getUiDevice().pressBack();  
    	    getUiDevice().pressBack();  
    	}
    }

    6、UIAutomator对象介绍

    UiDevice对象

    getUiDevice()的方法可以得到一个UiDevice的对象,通过这个对象可以完成一些针对设备的动作:
    click(int x, int y)
    ----在(x,y)表示的像素地方点击
    pressBack()
    pressDelete()
    pressEnter()
    pressHome()
    pressMenu()
    pressSearch()
    ----点击相应的按键
    wakeUp()
    ----当手机处于灭屏状态时,唤醒屏幕,并解锁。
    swipe(startX, startY, endX, endY, steps)
    ----在手机上滑动,从(startX,startY)到(endX,endY)。steps表示滑动的这个距离分为几步完成,数目越少,滑动幅度越大。
    setOrientationLeft()
    setOrientationRight()
    ----将手机向相应方向旋转。
    setOrientationNatural()
    ----将手机旋转状态回归正常。

    UiSelector对象

    这个对象可以理解为一种条件对象,描述的是一种条件,经常配合UiObject使用,可以得到某个(某些)符合条件的控件对象。
    checked(boolean val)
    ----描述一种check状态为val的关系。
    className(className)
    ----描述一种类名为className的对象关系
    clickable(boolean val)
    ----与checked类似,描述clickable状态为val的关系
    description(desc)
    ----不解释
    descriptionContains(desc)
    ----与description类似
    focusable(boolean val)
    ----与checked类似
    index(index)
    ----用当前对象在父对象集中的索引作为描述
    packageName(String name)
    ----用包名作为条件描述
    selected(val)
    ----描述一种选择关系
    text(text)
    ----最为常用的一种关系,用控件上的文本即可找到当前控件,需要注意,所有使用text属性找到的控件,必须是英文的。也就是说,不支持通过中文查找控件!
    textContains(text)
    ----与text类似
    textStartsWith(text)
    ----与text类似

    UiObject对象

    这个对象可以理解为控件的对象。 一般一个UiObject对象可以通过一下形式得到:
    UiObject mItem = new UiObject(new UiSelector().text("English"));
    也就是配合一个UiSelector就可以得到一个控件。
    click()
    ----点击控件
    clickAndWaitForNewWindow()
    ----点击某个控件,并等待窗口刷新
    longClick()
    ----长按
    clearTextField()
    ----清除文本,主要针对编辑框
    getChildCount()
    ----这个方法可以看出,其实UiObject也可以是一个控件的集合
    getPackageName()
    ----得到控件的包名
    getSelector()
    ----得到当前控件的选择条件
    getText()
    ----得到控件上的Text
    isCheckable()
    isChecked()
    isClickable()
    isLongClickable()
    isScrollable()
    isScrollable()
    isSelected()
    ----判断是否具备某个属性

    UiCollection对象

    这个对象可以理解为一个对象的集合。因为UiSelector描述后得到的有可能是多个满足条件的控件集合,因此可以用来生成UiCollection:
    UiCollection mUiCollection = new UiCollection(new UiSelector().text("Settings"));
    getChild(selector)
    ----从集合中再次通过UiSelector选择一个UiObject对象
    getChildByDescription(childPattern, text)
    ----从一个匹配模式中再次以text为条件选择UiObject
    getChildByText(childPattern, text)
    ----与上面类似。
    getChildCount()
    ----得到当前集合中控件的个数

    UiScrollable对象

    UiScrollable可以生成一个滚动动作的对象,其最大的作用就是可以实现滚动的查找某个元素。用法如下:

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

    等待操作和添加Log

    如果是对于一个标准的UiObject对象,可以通过clickAndWaitForNewWindow的方法在点击之后主动等待一段事件,但是如果需要额外的等待一段时间,特别对于getUiDevice().pressHome();这种操作,可能需要很长的事件去为下一步操作获取更多的事件,此时我们可以使用线程的sleep方法去实现:

    Thread.sleep(5000);

    而添加Log的方法也可以通过Java标准的println来实现:
    System.out.println("This used to print some log!!!" + setLanItem.getText());
    以上Log将会在jar被运行时通过CMD窗口打印出来。

  • 相关阅读:
    多媒体开发之图像---帧与场的区别
    Python之Python 安装环境搭建
    c/c++ c的第一个编译器
    多媒体开发之 H.264中NALU、RBSP、SODB的关系 (弄清码流结构)
    多媒体开发之h264中的sps---sps信息提取之帧率
    haproxy有关session的问题
    php的安装
    centos 6.5上部署jetty
    设置浏览器的颜色
    sed awk grep三剑客常用
  • 原文地址:https://www.cnblogs.com/tangdongchu/p/4234127.html
Copyright © 2011-2022 走看看