android自动化测试Uiautomator源码分析之一

1, 概述

Uiautomator顾名思义,就是UI自动化测试。主要用于仿真UI界面,包括单击,滑动,输入文本等操作。

主要分为三个子命令, rutest/dump/events

同其他大多数adb命令一样,Uiautomator命令也是shell脚本,system/bin 目录下有一个uiautomator文件脚本。最后三行如下

CLASSPATH=${CLASSPATH}:${jars}
export CLASSPATH
exec app_process ${base}/bin com.android.commands.uiautomator.Launcher ${args}

首先会导入jar包, 然后通过app_process来指定命令工作路径为'/system/bin/'以启动指定类com.android.commands.uiautomator.Launcher,

启动该类传入的参数就是指定的测试用例类. 最后会调用Launcher类中的main方法。

路径: frameworks\base\cmds\uiautomator\cmds\uiautomator\src\com\android\commands\uiautomator

和以前一样,先按照流程走一遍,看看是如何实现的。

2, 匹配Command

Launcher的main方法如下,

public static void main(String[] args) {
        // show a meaningful process name in `ps`
        Process.setArgV0("uiautomator");
        if (args.length >= 1) {
            Command command = findCommand(args[0]);
            if (command != null) {
                String[] args2 = {};
                if (args.length > 1) {
                    // consume the first arg
                    args2 = Arrays.copyOfRange(args, 1, args.length);
                }
                command.run(args2);
                return;
            }
        }
        HELP_COMMAND.run(args);
    }

首先findCommand方法根据输入参数args(包含测试类的详细命令)找出对应的Command类,然后调用其run方法开始运行。

如果未找到就调用默认的HELP_COMMAND的run方法。

findCommand方法如下,

private static Command findCommand(String name) {
        for (Command command : COMMANDS) {
            if (command.name().equals(name)) {
                return command;
            }
        }
        return null;
    }

遍历COMMANDS, 根据命令来匹配子COMMAND的name字符,

静态COMMANDS如下,

private static Command[] COMMANDS = new Command[] {
        HELP_COMMAND,
        new RunTestCommand(),
        new DumpCommand(),
        new EventsCommand(),
    };

4个HELP_COMMAND / RunTestCommand / DumpCommand / EventsCommand 都是Command 的子类,

对应的name变量分别是help/ runtest/ dump/ events,在构造的时候给name变量赋值, RunTestCommand构造方法如下,

public RunTestCommand() {
        super("runtest");
    }

其实runtest/ dump/ events依次对应着三个子命令。

  • runtest :对应RunTestCommand这个类,代表运行相应测试的命令
  • dump : 对应DumpCommand这个类,dump当前窗口控件信息,你在命令行运行‘uiautomator dump’就会把当前ui的hierarchy信息dump成一个文件默认放到sdcard上
  • events : 对应EventsCommand这个类,获取accessibility events,你在命令行运行'uiautomator events'然后在链接设备上操作一下就会看到相应的事件打印出来

如果不是这三个命令,就调用HELP_COMMAND的run方法, HELP_COMMAND是Launcher的内部类,如下

private static Command HELP_COMMAND = new Command("help") {
        @Override
        public void run(String[] args) {
            System.err.println("Usage: uiautomator <subcommand> [options]\n");
            System.err.println("Available subcommands:\n");
            for (Command command : COMMANDS) {
                String shortHelp = command.shortHelp();
                String detailedOptions = command.detailedOptions();
                if (shortHelp == null) {
                    shortHelp = "";
                }
                if (detailedOptions == null) {
                    detailedOptions = "";
                }
                System.err.println(String.format("%s: %s", command.name(), shortHelp));
                System.err.println(detailedOptions);
            }
        }

        @Override
        public String detailedOptions() {
            return null;
        }

        @Override
        public String shortHelp() {
            return "displays help message";
        }
    };

打印提示的log信息。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012439416/article/details/70183475
个人分类: ---【自动化测试】
想对作者说点什么? 我来说一句

uiautomator源码.zip

2015年02月25日 87KB 下载

uiautomator开源代码

2015年07月08日 87KB 下载

uiautomator源码

2015年01月15日 100KB 下载

没有更多推荐了,返回首页

不良信息举报

android自动化测试Uiautomator源码分析之一

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭