本人在使用UiAutomator的过程中,一直用快速调试类来做测试,发现其中很多地方都需要根据不同的需求做修改,今天特意花了点时间总体修改一遍,更加灵活了,又写了很多中文注释。分享出来,供大家参考。

package student;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 {private static String android_id = "1";//androidId,写好不用传参private static String jar_name = "";//jar名字private static String test_class = "";//包名.类名private static String test_name = "";//用例名private static String devices = UseOften.NEXUS5DEVICESID;//自定义设备IDprivate static String workspace_path;// 工作空间不需要配置,自动获取工作空间目录public UiAutomatorHelper() {//如果类有带参构造方法,必须把隐藏的空参构造方法写出来Library.getInstance().output("欢迎使用自定义调试类!");}public UiAutomatorHelper(String jarName, String testClass, String testName) {workspace_path = getWorkSpase();jar_name = jarName;test_class = testClass;test_name = testName;UseOften.getInstance().setMobileInputMethodToUtf();//设置输入法为utf7runUiautomator();UseOften.getInstance().setMobileInputMethodToQQ();//设置输入法为QQ输入法System.out.println(UseOften.LINE+"---FINISH DEBUG----"+UseOften.LINE);//结束}// 运行步骤private void runUiautomator() {creatBuildXml();modfileBuild();buildWithAnt();pushTestJar(workspace_path + "\\bin\\" + jar_name + ".jar");runTest(jar_name, test_class + "#" + test_name);}//创建build.xmlpublic void creatBuildXml() {execCmd("cmd /c android create uitest-project -n " + jar_name + " -t " + android_id + " -p " + "\""+ workspace_path + "\"");}//修改buildpublic void modfileBuild() {StringBuffer stringBuffer = new StringBuffer();//创建并实例化stringbuffertry {File file = new File("build.xml");if (file.isFile() && file.exists()) { //判断文件是否存在InputStreamReader read = new InputStreamReader(new FileInputStream(file));//通过文件字节输入流创建并实例化输出字符流(流转换)BufferedReader bufferedReader = new BufferedReader(read);//创建并实例化BufferedReader,用来接收字符流String lineTxt = null;//用来接收readline的结果while ((lineTxt = bufferedReader.readLine()) != null) {//循环读取处理内容if (lineTxt.matches(".*help.*")) {//正则匹配lineTxt = lineTxt.replaceAll("help", "build");//替换help为build}stringBuffer = stringBuffer.append(lineTxt + "\t\n");//stringbuffer接收修改后的内容}bufferedReader.close();//关闭流,有依赖关系所以先关闭read.close();//关闭流} else {System.out.println("找不到指定的文件");}} catch (Exception e) {System.out.println("读取文件内容出错");e.printStackTrace();}// 修改后写回去writerText("build.xml", new String(stringBuffer));}//ant 执行buildpublic void buildWithAnt() {execCmd("cmd /c ant");}//把jar包push到手机上public void pushTestJar(String localPath) {localPath = "\"" + localPath + "\"";String pushCmd = "adb -s "+devices+" push " + localPath + " /data/local/tmp/";execCmd(pushCmd);}//运行用例方法public void runTest(String jarName, String testName) {String runCmd = "adb -s "+devices+" shell uiautomator runtest ";//此处-s表示nexus机器String testCmd = jarName + ".jar " + "--nohup -c " + testName;execCmd(runCmd + testCmd);}//获取工作空间public String getWorkSpase() {File directory = new File("");//创建并实例化file对象String abPath = directory.getAbsolutePath();//获取绝对路径return abPath;}//执行cmd命令public void execCmd(String cmd) {try {Process p = Runtime.getRuntime().exec(cmd);//通过runtime类执行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);//保存,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);//保存,false表示不覆盖}errorReader.close();//此处有依赖关系,先关闭errorReadererrorInput.close();} catch (IOException e) {e.printStackTrace();}}//覆盖写入文件public void writerText(String path, String content) {File dirFile = new File(path);if (!dirFile.exists()) {//如果不存在,新建dirFile.mkdir();}try {//这里加入true 可以不覆盖原有TXT文件内容,续写BufferedWriter bw1 = new BufferedWriter(new FileWriter(path));//通过文件输出流来用bufferedwrite接收写入bw1.write(content);//将内容写到文件中bw1.flush();//强制输出缓冲区内容bw1.close();//关闭流} catch (IOException e) {e.printStackTrace();}}//写入文档,注释见writerText方法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();}}}


更多相关文章

  1. Android(安卓)引入第三方so后启动报错 /lib/arm64-v8a, /vendor/
  2. android开发AIDL实例
  3. Android断点续传原理
  4. 【转】Android(安卓)Repo的manifest XML文件格式
  5. android桌面预览效果
  6. VMware下Android(安卓)x86无声音的解决办法
  7. Android(安卓)之LayerDrawable层叠样式layer-list及自定义颜色Pr
  8. AndroidManifest.xml文件详解(instrumentation)
  9. Cordova 3.x 基础(5) -- 配置文件config.xml

随机推荐

  1. weex android 选择文件 拍照 获得uri 并
  2. Android之平时遇见的异常和错误总结(不断
  3. Android(安卓)学习笔记(二) 各种技巧小知识
  4. 【Android(安卓)Studio】LinearLayout(线
  5. Android(安卓)8.1.0 源码修改之 - 屏蔽 H
  6. 史上最详细的Android原生APP中添加ReactN
  7. Android(安卓)中 Handler 引起的内存泄露
  8. android checkbox多选框实现
  9. chromium判断是否支持硬件加速的方法
  10. Android(安卓)ffmpeg详解