UiAutomator的使用

本文详细介绍Android UiAutomator自动化测试工具的使用方法,包括环境搭建、脚本编写及执行等关键步骤,并附带示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自已写的脚本的地址: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+"\t\n");
        }
        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+"\n");
            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);
    }

}

 

转载于:https://www.cnblogs.com/penghong2014/p/4632549.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值