zoukankan      html  css  js  c++  java
  • uiaotumator ui測试 高速调试

    1、 uiaotumator ui測试

    Demo.java

    package uiautomatorDemo1;
    
    
    
    import java.io.File;
    
    import android.graphics.Point;
    import android.graphics.Rect;
    import android.os.RemoteException;
    import android.view.KeyEvent;
    import android.view.Surface;
    
    import com.android.uiautomator.core.UiDevice;
    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 Demo extends UiAutomatorTestCase {
       public void testDevice(){
    //     UiDevice.getInstance().pressHome();
    //     getUiDevice().pressHome();
          // Demo2 d2=new Demo2();
         //  d2.press();
       }
       public static void main(String[] agrs){
           String jarName,testClass,testName,androidId;
           jarName="Demo";//jar包名
           testClass="uiautomatorDemo1.Demo";//包名+类名
           testName="testBrowser";//功能函数
           androidId="1";
           new UiAutomatorHelper(jarName, testClass, testName, androidId);
       }
       public void testPress(){
           //UiDevice.getInstance().pressMenu();
           UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_A);
           UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_B);
           UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_C);
    
           UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_A,1);
           UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_B,1);
           UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_C,1);
    
       }
       public void testClick() throws UiObjectNotFoundException{
           //UiDevice.getInstance().click(399, 355);
    //     int h=UiDevice.getInstance().getDisplayHeight();
    //     int w=UiDevice.getInstance().getDisplayWidth();
    //     UiDevice.getInstance().click(w/2, h/2);
           UiObject clock=new UiObject(new UiSelector().resourceId("com.android.deskclock:id/analog_appwidget"));
    
           Rect r=clock.getBounds();
           int x0=r.left;
           int y0=r.top;
           int x1=r.right;
           int y1=r.bottom;
    
           int centerx=r.centerX();
           int centery=r.centerY();
    
           System.out.println("["+x0+","+y0+"]");
           System.out.println("["+x1+","+y1+"]");
    
    
    
       }
       public void testDragAndSwipe(){
           //[252,1704][444,1896]
    //     int startX, startY, endX, endY, steps;
    //     startX=(444-252)/2+252;
    //     startY=(1896-1704)/2+1704;
    //     endX=startX;
    //     endY=startY-500;
    //     steps=100;
    //     UiDevice.getInstance().drag(startX, startY, endX, endY, steps);
    
    //     int h=UiDevice.getInstance().getDisplayHeight();
    //     int w=UiDevice.getInstance().getDisplayWidth();
    //     UiDevice.getInstance().swipe(w-50, h/2, 50, h/2, 10);
    
           //277,318   746,335  784,814   221,840
           Point p1=new Point();
           Point p2=new Point();
           Point p3=new Point();
           Point p4=new Point();
    
           p1.x=277;p1.y=318;
           p2.x=746;p2.y=335;
           p3.x=784;p3.y=814;
           p4.x=221;p4.y=840;
    
           Point[] pp={p1,p2,p3,p4};
    
           UiDevice.getInstance().swipe(pp, 50);
    
    
    
       }
    
       public void testOrientation() throws RemoteException{
           UiDevice.getInstance().setOrientationLeft();
           UiDevice.getInstance().setOrientationRight();
    
           if(UiDevice.getInstance().isNaturalOrientation()){
               UiDevice.getInstance().setOrientationLeft();
           }
    
           int a=UiDevice.getInstance().getDisplayRotation();
           if(a==Surface.ROTATION_0){
    
           }
       if(a==Surface.ROTATION_90){
    
           }
       if(a==Surface.ROTATION_180){
    
       }
       if(a==Surface.ROTATION_270){
    
       }
    
       }
    
    public void testWakeupAndSleep() throws RemoteException{
        if(!UiDevice.getInstance().isScreenOn()){
            //UiDevice.getInstance().sleep();
            UiDevice.getInstance().wakeUp();
        }
    
    }
    public void testScreen(){
        UiDevice.getInstance().takeScreenshot(new File("/sdcard/test1.png"));   
    }
    public void testIdle(){
        //[828,1704][1020,1896]
    
        UiDevice.getInstance().click(950, 1800);
        UiDevice.getInstance().waitForIdle(20000);  
    }
    public void testGetPackage(){
        String packageName=UiDevice.getInstance().getCurrentPackageName();
        System.out.println(packageName);
    
        UiDevice.getInstance().openNotification();
        sleep(3000);
        UiDevice.getInstance().openQuickSettings();
    
        UiDevice.getInstance().dumpWindowHierarchy("n.xml");
    
    
    }
    public void testBrowser() throws RemoteException{
        //灭屏-》亮屏->解锁->单击浏览器->单击网址输入框->输入www.baidu.com->按回车键->旋转屏幕->截图
        UiDevice.getInstance().sleep();
        sleep(2000);
        if(!UiDevice.getInstance().isScreenOn()){
            UiDevice.getInstance().wakeUp();
        }
        sleep(2000);
        UiDevice.getInstance().swipe(536, 1496, 1080, 1496, 20);
        UiDevice.getInstance().pressHome();
        UiDevice.getInstance().click(950, 1800);
        sleep(3000);
        UiDevice.getInstance().click(589, 151);
        sleep(2000);
        UiDevice.getInstance().pressDelete();
        sleep(2000);
        UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_W);
        sleep(500);
        UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_W);
        sleep(500);
        UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_W);
        sleep(500);
        UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_PERIOD);
        sleep(500);
        UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_B);
        sleep(500);
        UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_A);
        sleep(500);
        UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_I);
        sleep(500);
        UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_D);
        sleep(500);
        UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_U);
        sleep(500);
        UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_PERIOD);
        sleep(500);
        UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_C);
        sleep(500);
        UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_O);
        sleep(500);
        UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_M);
        sleep(500);
    
        UiDevice.getInstance().pressEnter();
        sleep(2000);
        UiDevice.getInstance().setOrientationLeft();
        sleep(2000);
        UiDevice.getInstance().takeScreenshot(new File("/sdcard/browser.png"));
    
    
    
    
    }
    
    }

    2、 UiAutomator高速调试

    UiAutomatorHelper.java

    package uiautomatorDemo1;
    
    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.FileWriter;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    
    public class UiAutomatorHelper {
    
        // 下面參数须要配置。用例集id。用例id,安卓id
        private static String android_id = "3";
        private static String jar_name = "";
        private static String test_class = "";
        private static String test_name = "";
    
        // 工作空间不须要配置,自己主动获取工作空间文件夹
        private static String workspace_path;
    
        public static void main(String[] args) {
    
        }
        public UiAutomatorHelper() {
            workspace_path = getWorkSpase();
            System.out.println("---工作空间:	
    " + getWorkSpase());
        }
    
        /**
         * 需求:UI工程调试构造器,输入jar包名,包名。类名。用例名
         * @param jarName
         * @param testClass
         * @param testName
         * @param androidId
         */
        public UiAutomatorHelper(String jarName, String testClass, String testName,
                String androidId) {
            System.out.println("-----------start--uiautomator--debug-------------");
            workspace_path = getWorkSpase();
            System.out.println("----工作空间:	
    " + getWorkSpase());
    
            jar_name = jarName;
            test_class = testClass;
            test_name = testName;
            android_id = androidId;
            runUiautomator();
            System.out.println("*******************");
            System.out.println("---FINISH DEBUG----");
            System.out.println("*******************");
        }
        /**
         * 需求:build 和 复制jar到指定文件夹
         * @param jarName
         * @param testClass
         * @param testName
         * @param androidId
         * @param isRun
         */
        public UiAutomatorHelper(String jarName, String testClass, String testName,
                String androidId,String ctsTestCasePath){
            System.out.println("-----------start--uiautomator--debug-------------");
            workspace_path = getWorkSpase();
            System.out.println("----工作空间:	
    " + getWorkSpase());
    
            jar_name = jarName;
            test_class = testClass;
            test_name = testName;
            android_id = androidId;
            buildUiautomator(ctsTestCasePath);
    
            System.out.println("*******************");
            System.out.println("---FINISH DEBUG----");
            System.out.println("*******************");
    
        }
        // 执行步骤
        private void runUiautomator() {
            creatBuildXml();
            modfileBuild();
            buildWithAnt();
            if (System.getProperty("os.name").equals("Linux")) {
                pushTestJar(workspace_path + "/bin/" + jar_name + ".jar");
            }else{
            pushTestJar(workspace_path + "\bin\" + jar_name + ".jar");
            }
    
            if (test_name.equals("")) {
                runTest(jar_name, test_class);
                return;
            }
            runTest(jar_name, test_class + "#" + test_name);
        }       
    
    
        // 1--推断是否有build
        public boolean isBuild() {
            File buildFile = new File("build.xml");
            if (buildFile.exists()) {
                return true;
            }
            // 创建build.xml
            execCmd("cmd /c android create uitest-project -n " + jar_name + " -t "
                    + android_id + " -p " + workspace_path);
            return false;
        }
    
        // 创建build.xml
        public void creatBuildXml() {
            execCmd("cmd /c android create uitest-project -n " + jar_name + " -t "
                    + android_id + " -p " + """+workspace_path+ """);
        }
    
        // 2---改动build
        public void modfileBuild() {
            StringBuffer stringBuffer = new StringBuffer();
            try {
                File file = new File("build.xml");
                if (file.isFile() && file.exists()) { // 推断文件是否存在
                    InputStreamReader read = new InputStreamReader(
                            new FileInputStream(file));
                    BufferedReader bufferedReader = new BufferedReader(read);
                    String lineTxt = null;
                    while ((lineTxt = bufferedReader.readLine()) != null) {
                        if (lineTxt.matches(".*help.*")) {
                            lineTxt = lineTxt.replaceAll("help", "build");
                            // System.out.println("改动后: " + lineTxt);
                        }
                        stringBuffer = stringBuffer.append(lineTxt + "	
    ");
                    }
                    read.close();
                } else {
                    System.out.println("找不到指定的文件");
                }
            } catch (Exception e) {
                System.out.println("读取文件内容出错");
                e.printStackTrace();
            }
    
            System.out.println("-----------------------");
    
            // 改动后写回去
            writerText("build.xml", new String(stringBuffer));
            System.out.println("--------改动build完毕---------");
        }
    
    
    
        // 3---ant 执行build
        public void buildWithAnt() {
            if (System.getProperty("os.name").equals("Linux")) {
                execCmd("ant");
                return;
            }
            execCmd("cmd /c ant");
        }
    
        // 4---push jar
        public void pushTestJar(String localPath) {
            localPath="""+localPath+""";
            System.out.println("----jar包路径: "+localPath);
            String pushCmd = "adb push " + localPath + " /data/local/tmp/";
            System.out.println("----" + pushCmd);
            execCmd(pushCmd);
        }
    
        // 执行測试
        public void runTest(String jarName, String testName) {
            String runCmd = "adb shell uiautomator runtest ";
            String testCmd = jarName + ".jar " + "--nohup -c " + testName;
            System.out.println("----runTest:  " + runCmd + testCmd);
            execCmd(runCmd + testCmd);
        }
    
        public String getWorkSpase() {
            File directory = new File("");
            String abPath = directory.getAbsolutePath();
            return abPath;
        }
    
        /**
         * 需求:执行cmd命令。且输出信息到控制台
         * @param cmd
         */
        public void execCmd(String cmd) {
            System.out.println("----execCmd:  " + cmd);
            try {
                Process p = Runtime.getRuntime().exec(cmd);
                //正确输出流
                InputStream input = p.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(
                        input));
                String line = "";
                while ((line = reader.readLine()) != null) {
                    System.out.println(line);
                    saveToFile(line, "runlog.log", false);
                }
                //错误输出流
                InputStream errorInput = p.getErrorStream();
                BufferedReader errorReader = new BufferedReader(new InputStreamReader(
                        errorInput));
                String eline = "";
                while ((eline = errorReader.readLine()) != null) {
                    System.out.println(eline);
                    saveToFile(eline, "runlog.log", false);
                }       
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        /**
         * 需求:写如内容到指定的文件里
         * 
         * @param path
         *            文件的路径
         * @param content
         *            写入文件的内容
         */
        public void writerText(String path, String content) {
    
            File dirFile = new File(path);
    
            if (!dirFile.exists()) {
                dirFile.mkdir();
            }
    
            try {
                // new FileWriter(path + "t.txt", true) 这里增加true 能够不覆盖原有TXT文件内容 续写
                BufferedWriter bw1 = new BufferedWriter(new FileWriter(path));
                bw1.write(content);
                bw1.flush();
                bw1.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        public void saveToFile(String text,String path,boolean isClose) {
            File file=new File("runlog.log");       
            BufferedWriter bf=null;
            try {
                FileOutputStream outputStream=new FileOutputStream(file,true);
                OutputStreamWriter outWriter=new OutputStreamWriter(outputStream);
                bf=new BufferedWriter(outWriter);
                bf.append(text);
                bf.newLine();
                bf.flush();
    
                if(isClose){
                    bf.close();
                }
            } catch (FileNotFoundException e1) {
                e1.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
    
        }
        /**
         * 需求:编译和复制jar包指定文件
         * @param newPath
         */
        private void buildUiautomator(String newPath) {
            creatBuildXml();
            modfileBuild();
            buildWithAnt();
            //拷贝文件到指定文件夹
            copyFile(workspace_path + "\bin\" + jar_name + ".jar", newPath);
    
        }
        /** 
         * 复制单个文件 
         * @param oldPath String 原文件路径 如:c:/fqf.txt 
         * @param newPath String 复制后路径 如:f:/fqf.txt 
         * @return boolean 
         */ 
       public void copyFile(String oldPath, String newPath) { 
           System.out.println("源文件路径:"+oldPath);
           System.out.println("目标文件路径:"+newPath);
           try { 
               int bytesum = 0; 
               int byteread = 0; 
               File oldfile = new File(oldPath); 
               if (oldfile.exists()) { //文件存在时 
                   InputStream inStream = new FileInputStream(oldPath); //读入原文件 
                   FileOutputStream fs = new FileOutputStream(newPath); 
                   byte[] buffer = new byte[1444]; 
                   int length; 
                   while ( (byteread = inStream.read(buffer)) != -1) { 
                       bytesum += byteread; //字节数 文件大小 
                       System.out.println(bytesum); 
                       fs.write(buffer, 0, byteread); 
                   } 
                   inStream.close(); 
               } 
           } 
           catch (Exception e) { 
               System.out.println("复制单个文件操作出错"); 
               e.printStackTrace(); 
    
           } 
    
       } 
    
    
    
    }
  • 相关阅读:
    Asp.net HttpContext 简介
    cxf 调用 .net webservice
    Dapper.Rainbow 简单使用
    Aspose.words 书签定位
    修改WCF的默认序列化格式
    mysql8.0.18忘记密码后重置密码
    聊一聊c#中的MATH.ROUND方法
    Windows上安装MySql
    win7搭建本地SonarQube环境进行c#代码分析
    使用dapper遇到的问题及解决方法
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7230520.html
Copyright © 2011-2022 走看看