Android测试工具UiAutomator(Demo篇)

来源:互联网 发布:淘宝国际网 编辑:程序博客网 时间:2024/05/17 08:03

UiAutomator简介

UIAutomator是Android自带的一个黑盒测试工具,测试代码结构简单,编写容易,学习曲线低。基于JAVA,一次编译可以运行于所有Android设备。


UiAutomator 主要模块:

  • UIDevice:通常用于获取系统的设备信息、系统按键、全局操作等。
  • UiObject:获取UI元素,点击、拖拽、滑动、对象属性判断、手势等。
  • UiSelector:通过各种属性节点和关系来定位组件。
  • UiScrollable:操作元素滚动。
  • UiCollection:用于获取满足某种搜索条件的组件集合,通过链式搜索确定最终需要的组件。
  • UiWatcher:拦截异常,处理完异常后,再返回原来的脚本执行顺序。
  • Configuration:对默认操作的配置。

更多详情


UiAutomator 特点:

可以测试需要在不同app之间切换的情况
只能测试Android native app
需要Android SDK 4.1+
无法获取当前load的activity
无法做网络链接测试和声音测试
debug过程比较麻烦


UiAutomator使用方法:

  1. Eclipse新建Java Project,注意,不是Android Project!
  2. 添加JUnit库
    next->Libraries->Add Library
  3. 添加Android库
    将Android-sdk\platforms\android-17\下面的android.jar和uiautomator.jar添加进来
    Add External JARs->
  4. SRC文件下添加包和class文件
    Src->new->package、package->class
  5. 查找SDK ID
    CMD进入\Android-sdk\tools\目录下,运行命令:android list
    查看对应android版本的SDK的ID值
  6. 创建build文件
    在\Android-sdk\tools\目录下,运行命令:
    android create uitest-project -n <name> -t <android-sdk-ID> -p <path>
    比如:
    android create uitest-project -n UiAutomator -t 60 -p E:\workspace\UiAutomator
    上面的name就是将来生成的jar包的名字,可以自己定义,android-sdk-ID就是上面看到的60;path是Eclipse新建的工程的路径;运行命令后,将会在工程的根目录下生成build.xml文件。如果没生成,检查上面的步骤。
  7. 把类编译生成jar包
    a)CMD进入项目的工程目录,然后运行ant build,将使用ant编译生成jar,成功将会提示:successful
    然后会在工程的bin目录下生成jar文件
    b)或者进入build.xml文件中将default=’help’修改为default=’build’,右键点击Run As –>Ant Build,自动生成jar包
  8. push并运行jar
    adb push <jar文件路径> data/local/tmp
    adb shell uiautomator runtest <jar文件名> -c <工程中的类名,包含包名> 包名.类名 package.class
    比如:
    adb push e:\workspace\ UiAutomator \bin\ UiAutomator.jar data/local/tmp
    adb shell uiautomator runtest UiAutomator.jar -c uiautomator. UiAutomator
    然后就能看到手机会按照Runner中的步骤自动执行。具体效果就是,进入设置菜单,然后再进入“语言和输入法”菜单
    adb shell uiautomator runtest UIAutomation.jar -c com.example.TestUiAutomation -e debug true里面的-e debug true 这个参数调试自动化测试代码

Demo:

package com.ui.test;  import android.os.RemoteException;import com.android.uiautomator.core.UiObject;import com.android.uiautomator.core.UiObjectNotFoundException;import com.android.uiautomator.core.UiSelector;import com.android.uiautomator.testrunner.UiAutomatorTestCase;public class Uiautomator extends UiAutomatorTestCase {  public void testDemo() throws UiObjectNotFoundException, RemoteException {          //回到桌面        getUiDevice().pressBack();        getUiDevice().pressHome();        getUiDevice().pressBack();        getUiDevice().unfreezeRotation();        getUiDevice().setOrientationLeft();        getUiDevice().setOrientationRight();        // 进入更多分类        UiObject More = new UiObject(new UiSelector().text("More"));          More.click();         // 进入壁纸设置        UiObject Wallpaper= new UiObject(new UiSelector().text("Wallpaper"));          Wallpaper.click();         getUiDevice().pressEnter();         getUiDevice().pressBack();           //休眠3秒          try {              Thread.sleep(3000);          } catch (InterruptedException e1) {              e1.printStackTrace();          }        UiObject App_uninstall= new UiObject(new UiSelector().textContains("uninstall"));         if(App_uninstall.exists() && App_uninstall.isEnabled())        {            App_uninstall.click();         }        for(;;)        {   sleep(3000);            getUiDevice().pressDPadDown();            getUiDevice().pressKeyCode(23);            UiObject okButton = new UiObject(new UiSelector().text("OK").className("android.widget.Button"));            if(!okButton.exists())            {                break;            }            else okButton.clickAndWaitForNewWindow();        }        testDemo1();        UiObject AppStore= new UiObject(new UiSelector().text("App Store"));        AppStore.click();        sleep(3000);        UiObject Recommend= new UiObject(new UiSelector().text("Recommend"));        Recommend.click();        sleep(3000);        UiObject Install= new UiObject(new UiSelector().textContains("Five"));        Install.click();         try {               Thread.sleep(3000);           } catch (InterruptedException e2) {               e2.printStackTrace();           }         UiObject successfully= new UiObject(new UiSelector().textContains("the exit key"));         UiObject failed= new UiObject(new UiSelector().textContains("the OK button"));        if(!successfully.exists()&&!failed.exists())       {           sleep(3000);        }        else if(failed.exists())               {  for(int i=1;i<=3;i++)                     { getUiDevice().pressKeyCode(23);}                } else getUiDevice().pressBack();       }     public void testDemo1() throws UiObjectNotFoundException{        getUiDevice().pressBack();        getUiDevice().pressHome();        getUiDevice().pressBack();        UiObject TV= new UiObject(new UiSelector().text("TV"));        TV.click();        sleep(3000);        getUiDevice().pressBack();        UiObject Demand= new UiObject(new UiSelector().text("Demand"));        Demand.click();        sleep(3000);        getUiDevice().pressBack();    }}

备注: Window环境

0 0