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> |
传入一个键值对到测试程序中,可用于一些需要变化的参数的传入 |
n -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
n -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();
}
}