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;
	}

往期文章精选

  1. java一行代码打印心形
  2. Linux性能监控软件netdata中文汉化版
  3. 接口测试代码覆盖率(jacoco)方案分享
  4. 性能测试框架
  5. 如何在Linux命令行界面愉快进行性能测试
  6. 图解HTTP脑图
  7. 写给所有人的编程思维
  8. 将json数据格式化输出到控制台
  9. 如何测试概率型业务接口
  10. 将swagger文档自动变成测试代码
  11. Mac+httpclient高并发配置实例
  12. httpclient处理多用户同时在线

公众号地图 ☢️ 一起来~FunTester

转载于:https://my.oschina.net/u/3973795/blog/3097714

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值