• UiAutomator的使用


    自已写的脚本的地址: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);
        }
    
    }
  • 相关阅读:
    缓存
    vue 生命周期:
    mongodb 数据库 增删改查
    微信小程序左右分类滚动列表
    4月29日记
    什么是MVVM
    什么是mvc
    React路由
    TodoList案例
    React中兄弟组件传值
  • 原文地址:https://www.cnblogs.com/penghong2014/p/4632549.html
Copyright © 2020-2023  润新知