自已写的脚本的地址:http://yunpan.cn/cLdujtIPvF4SM 访问密码 013a
1.UiAutomator是什么?
android 4.1以后发布的一款自动化测试工具,作用跟appium类似,都是控件层面的UI测试
2.UiAutomator如何使用?
1)在eclispse编写脚本的时候,新建项目--新建一个libs文件夹,把android-sdk中platforms下面的android-19中的两个依赖库android.jar、uiautomator.jar复制进去(android中其它版本也有这两个包)
2)然后在libs中选中这两个jar,右键--build path,添加到引用
3)然后进入sdk--tools目录下,在此处打开命令窗口,输入andrlid list找到android-19对应的序列号SDK ID,第4步中会用到
4)创建build文件(jar的前身),还是在tools下面打开命令窗口,输入:android create uitest-project -n jar名称(不用加后缀) -t <android-sdk-ID> -p 项目路径
5)创建jar文件,进入项目根目录,在此处打开命令窗口,输入ant build(注意必须打开build,把它的默认属性改为“build”),这样jar包就生成了
6)怎么运行呢,你所有的脚本都确定后,就需要创建jar了,然后把它push到你手机下,这个目录下:adb push vv7.jar /data/local/tmp
7)最后一步就是运行测试啦:打开命令行窗口,输入adb shell uiautomator runtest jar文件(一个或多个,多个用空格) -c class(一个或多个,必须以包名.类名的格式),如下是一个很标准的用法adb shell uiautomator runtest vv7.jar --nohup -c com.vv7.Demo#testDemo
运行一个类里面多个方法:
更多的用法要参考官网:http://wear.techbrood.com/tools/help/uiautomator/index.html
8)把uiautomator的使用步骤编写成脚本了
package studyuiautomator1; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Iterator; public class helpbuild { String jarname; String packagename; String classname; String functionname; public helpbuild(String jar_name,String packagename1,String classname1,String functionname1) throws Exception { jarname=jar_name; packagename=packagename1; classname=classname1; functionname=functionname1; File now=new File(""); String path=now.getAbsolutePath(); System.out.println("build文件创建成功了?"+createbuild(jarname, "3", path)); System.out.println("build修改成功了吗?"+modifbuild()); System.out.println("JAR文件编译成功了吗"+createjar()); push(path, jarname); starttest(jarname, packagename, classname, functionname); } //创建build文件 public static boolean createbuild(String jarname,String sdkid,String workpath) throws Exception { ArrayList<String> out=execmd("cmd /c android create uitest-project -n "+jarname+" -t "+sdkid+" -p "+"""+workpath+ """); Iterator<String> it=out.iterator(); int i=0; while(it.hasNext()) { String ss=it.next(); System.out.println(ss); if(ss.startsWith("Added file")||ss.startsWith("Updated file")) { i=1; break; } } if(i==1) return true; else return false; } //修改build文件的默认属性 public static boolean modifbuild() throws Exception { File file=new File("build.xml"); FileReader fr=new FileReader(file); BufferedReader br=new BufferedReader(fr); String str; StringBuffer sb=new StringBuffer(); int i=0; while((str=br.readLine())!=null) { if(str.matches(".*help.*")) { str=str.replaceAll("help", "build"); if(str.matches(".*build.*")) i=1; } sb.append(str+" "); } br.close(); FileWriter fw=new FileWriter(file); BufferedWriter bw=new BufferedWriter(fw); bw.write(new String(sb)); bw.flush(); bw.close(); if(i==1) return true; else return false; } //编译生成jar public static boolean createjar() throws Exception { ArrayList<String> arr=execmd("cmd /c ant"); Iterator<String> a=arr.iterator(); int i=0; while(a.hasNext()) { String str=a.next(); if(str.matches(".*BUILD SUCCESSFUL.*")) { i=1; break; } } if(i==1) return true; else return false; } //把jar文件push到手机里面 public static void push(String path1,String jarname) throws Exception { ArrayList<String> tt=execmd("cmd /c adb push "+path1+"\bin\"+jarname+".jar "+"/data/local/tmp"); } //执行系统命令并把输出结果放到当前目录的log.xml文件中 public static ArrayList<String> execmd(String cmd) throws Exception { ArrayList<String> list=new ArrayList<String>(); File file=new File("log.xml"); if(!file.exists()) file.createNewFile(); FileWriter fw=new FileWriter(file,true); BufferedWriter bw=new BufferedWriter(fw); Process p=Runtime.getRuntime().exec(cmd); InputStream in=p.getInputStream(); InputStreamReader is=new InputStreamReader(in); BufferedReader br=new BufferedReader(is); String str; while((str=br.readLine())!=null) { bw.write(str+" "); list.add(str); } bw.close(); fw.close(); br.close(); is.close(); return list; } //启动测试 public static void starttest(String jarname,String packagename,String classname,String functionname) throws Exception { if(functionname.equals("")) execmd("cmd /c adb shell uiautomator runtest "+jarname+".jar --nohup -c "+packagename+"."+classname); else execmd("cmd /c adb shell uiautomator runtest "+jarname+".jar --nohup -c "+packagename+"."+classname+"#"+functionname); } }