UiAutomator测试中如何恢复手机输入法

本人在使用UiAutomator测试的时候,需要用到utf7输入法,每次执行之前都会切换到utf7输入法,然后每次执行结束之后再切换到正常输入法,由于测试机器比较多,所以写了一个自动切换到其他任意输入法的方法。分享代码,供大家参考。

    /**
     * 修改手机输入法为utf7
     */
    public void setMobileInputMethodToUtf() {
        execCmdAdb("adb shell settings put secure default_input_method jp.jun_nama.test.utf7ime/.Utf7ImeService");
    }

    /**
     * 设置其他输入法
     */
    public void setMobileInputMethodToOthers() {
        String name;
        List<String> lists = execCmdAndReturnResult("adb shell ime list -s");
        for (int i = 0; i < lists.size(); i++) {
            if (!lists.get(i).contains("utf7ime")) {
                name = lists.get(i);
                execCmdAdb("adb shell settings put secure default_input_method " + name);
            }
        }
    }

其中execCmdAdb和execCmdAndReturnResult方法如下:

/**
     * 执行cmd命令
     * 
     * @param cmd
     *            命令
     */
    public void execCmdAdb(String cmd) {
        output("正在执行:" + cmd);
        String OSname = System.getProperty("os.name");
        try {
            Process p = null;
            if (OSname.contains("Mac")) {
                p = Runtime.getRuntime().exec(ADB_PATH + cmd);
            } else {
                p = Runtime.getRuntime().exec("cmd /c " + cmd);
            }
            // 正确输出流
            InputStream input = p.getInputStream();// 创建并实例化输入字节流
            BufferedReader reader = new BufferedReader(new InputStreamReader(input));// 先通过inputstreamreader进行流转化,在实例化bufferedreader,接收内容
            String line = "";
            while ((line = reader.readLine()) != null) {// 循环读取
                System.out.println(line);// 输出
                saveToFile(line, "runlog.log");// 保存,false表示不覆盖
            }
            reader.close();// 此处reader依赖于input,应先关闭
            input.close();
            // 错误输出流
            InputStream errorInput = p.getErrorStream();// 创建并实例化输入字节流
            BufferedReader errorReader = new BufferedReader(new InputStreamReader(errorInput));// 先通过inputstreamreader进行流转化,在实例化bufferedreader,接收内容
            String eline = "";
            while ((eline = errorReader.readLine()) != null) {// 循环读取
                System.out.println(eline);// 输出
                saveToFile(eline, "runlog.log");// 保存,false表示不覆盖
            }
            errorReader.close();// 此处有依赖关系,先关闭errorReader
            errorInput.close();
        } catch (IOException e) {
            output("执行" + cmd + "失败!");
            e.printStackTrace();
        }
    }
/**
     * 执行adb命令,返回信息
     * 
     * @param cmd
     *            命令内容
     */
    public List<String> execCmdAndReturnResult(String cmd) {
        output("正在执行:" + cmd);
        List<String> result = new ArrayList<String>();
        String OSname = System.getProperty("os.name");
        try {
            Process p = null;
            if (OSname.contains("Mac")) {
                p = Runtime.getRuntime().exec(ADB_PATH + cmd);
            } else {
                p = Runtime.getRuntime().exec("cmd /c " + cmd);
            }
            // 正确输出流
            InputStream input = p.getInputStream();// 创建并实例化输入字节流
            BufferedReader reader = new BufferedReader(new InputStreamReader(input));// 先通过inputstreamreader进行流转化,在实例化bufferedreader,接收内容
            String line = "";
            while ((line = reader.readLine()) != null) {
                // output(line);
                result.add(line);
            }
            reader.close();// 此处reader依赖于input,应先关闭
            input.close();
        } catch (IOException e) {
            output("执行" + cmd + "失败!");
            e.printStackTrace();
        }
        return result;
    }

原文发布于微信公众号 - FunTester(NuclearTester)

原文发表时间:2019-08-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券