首页 > 数据库 > 数据库开发技术 > UiAutomator测试中如何恢复手机输入法
本人在使用UiAutomator测试的时候,需要用到utf7输入法,每次执行之前都会切换到utf7输入法,然后每次执行结束之后再切换到正常输入法,由于测试机器比较多,所以写了一个自动切换到其他任意输入法的方法。分享代码,供大家参考。
1 /**
2 * 修改手机输入法为utf7
3 */
4 public void setMobileInputMethodToUtf() {
5 execCmdAdb("adb shell settings put secure default_input_method jp.jun_nama.test.utf7ime/.Utf7ImeService");
6 }
7
8 /**
9 * 设置其他输入法
10 */
11 public void setMobileInputMethodToOthers() {
12 String name;
13 List<String> lists = execCmdAndReturnResult("adb shell ime list -s");
14 for (int i = 0; i < lists.size(); i++) {
15 if (!lists.get(i).contains("utf7ime")) {
16 name = lists.get(i);
17 execCmdAdb("adb shell settings put secure default_input_method " + name);
18 }
19 }
20 }
其中execCmdAdb和execCmdAndReturnResult方法如下:
1/**
2 * 执行cmd命令
3 *
4 * @param cmd
5 * 命令
6 */
7 public void execCmdAdb(String cmd) {
8 output("正在执行:" + cmd);
9 String OSname = System.getProperty("os.name");
10 try {
11 Process p = null;
12 if (OSname.contains("Mac")) {
13 p = Runtime.getRuntime().exec(ADB_PATH + cmd);
14 } else {
15 p = Runtime.getRuntime().exec("cmd /c " + cmd);
16 }
17 // 正确输出流
18 InputStream input = p.getInputStream();// 创建并实例化输入字节流
19 BufferedReader reader = new BufferedReader(new InputStreamReader(input));// 先通过inputstreamreader进行流转化,在实例化bufferedreader,接收内容
20 String line = "";
21 while ((line = reader.readLine()) != null) {// 循环读取
22 System.out.println(line);// 输出
23 saveToFile(line, "runlog.log");// 保存,false表示不覆盖
24 }
25 reader.close();// 此处reader依赖于input,应先关闭
26 input.close();
27 // 错误输出流
28 InputStream errorInput = p.getErrorStream();// 创建并实例化输入字节流
29 BufferedReader errorReader = new BufferedReader(new InputStreamReader(errorInput));// 先通过inputstreamreader进行流转化,在实例化bufferedreader,接收内容
30 String eline = "";
31 while ((eline = errorReader.readLine()) != null) {// 循环读取
32 System.out.println(eline);// 输出
33 saveToFile(eline, "runlog.log");// 保存,false表示不覆盖
34 }
35 errorReader.close();// 此处有依赖关系,先关闭errorReader
36 errorInput.close();
37 } catch (IOException e) {
38 output("执行" + cmd + "失败!");
39 e.printStackTrace();
40 }
41 }
1/**
2 * 执行adb命令,返回信息
3 *
4 * @param cmd
5 * 命令内容
6 */
7 public List<String> execCmdAndReturnResult(String cmd) {
8 output("正在执行:" + cmd);
9 List<String> result = new ArrayList<String>();
10 String OSname = System.getProperty("os.name");
11 try {
12 Process p = null;
13 if (OSname.contains("Mac")) {
14 p = Runtime.getRuntime().exec(ADB_PATH + cmd);
15 } else {
16 p = Runtime.getRuntime().exec("cmd /c " + cmd);
17 }
18 // 正确输出流
19 InputStream input = p.getInputStream();// 创建并实例化输入字节流
20 BufferedReader reader = new BufferedReader(new InputStreamReader(input));// 先通过inputstreamreader进行流转化,在实例化bufferedreader,接收内容
21 String line = "";
22 while ((line = reader.readLine()) != null) {
23 // output(line);
24 result.add(line);
25 }
26 reader.close();// 此处reader依赖于input,应先关闭
27 input.close();
28 } catch (IOException e) {
29 output("执行" + cmd + "失败!");
30 e.printStackTrace();
31 }
32 return result;
33 }
原文作者:FunTester;如有侵权,请联系管理员删除。