uiautomator录音等操作生成的文件保存到手机指定文件中,然后如何判断是否存在

      我们在测试一些项目会自动保存到文件夹中,如:录音、录像、拍照等,都自动保存到指定路径中,我们该如何判断是否已经保存到指定目录中呢?或者说指定目录中是否含有我们要的文件呢?

       首先考虑一个就是保存到指定文件夹,肯定已知哪个文件夹、文件名称是什么,保存后会自动提示,但是代码如何去做;

      保存文件路径,那肯定是固定的,这个不用考虑了。我们考虑是:先获取当前文件的文件名,然后根据文件名去指定路径去查找,看看该文件在否;

ps:如下图所示(图片可能加载不出来,就想象下吧),这是我录音后的界面,已经弹出toast提示我该录音文件保存到了指定文件夹中,注意toast在uiautomator是获取不了的,我们不能根据这个toast去获取;

我们直接先获取它自动生成的录音名称,根据它的resource-id去获取get出来:

UiObject RecordName = new UiObject(new UiSelector().resourceId("cn.dsy.recorder:id/audio_name_text"));//录音后的文件名

w=RecordName.getText();//获取录音后的文件名称"Voice_20171025_104129"存到w中;

然后到指定文件目录中,用w去查找该文件夹中是否存在这个文件名;先操作录音这个动作还有把结果保存文件中,其他文章已经讲过了,这个就不细讲,我们看重点部分;

第一步,我们先得有个查找的方法,uiautomator方法中没有自动,我们要自己写,什么,你不会写?没关系,百度有,直接先copy百度查找对比文件的方法,我也是直接copy了:

先新建一个公共的文件查找方法和类

package dengshengyu.Util;

import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;

/*
 * 项目名称:PublicPressureScript
 * 类名称:FileUtil
 * 类描述:写文件的父类,为了查找文件
 * 创建人:享有盛誉之名
 * 创建时间:2017年8月16日 上午9:00
 * 备注:1.录音文件调用(NewRecord)
 * 
 * */
//操作查找文件的类
public class TextSearchFile {
  public static int countFiles = 0;// 声明统计文件个数的变量
  public static int countFolders = 0;// 声明统计文件夹的变量

  public static File[] searchFile(File folder, final String keyWord) {// 递归查找包含关键字的文件

      File[] subFolders = folder.listFiles(new FileFilter() {// 运用内部匿名类获得文件
          public boolean accept(File pathname) {// 实现FileFilter类的accept方法
              if (pathname.isFile())// 如果是文件
                  countFiles++;
              else
                  // 如果是目录
                  countFolders++;
              if (pathname.isDirectory()
                      || (pathname.isFile() && pathname.getName().toLowerCase().contains(keyWord.toLowerCase())))// 目录或文件包含关键字
                  return true;
              return false;
          }
      });

      List<File> result = new ArrayList<File>();// 声明一个集合
      for (int i = 0; i < subFolders.length; i++) {// 循环显示文件夹或文件
          if (subFolders[i].isFile()) {// 如果是文件则将文件添加到结果列表中
              result.add(subFolders[i]);
          } else {// 如果是文件夹,则递归调用本方法,然后把所有的文件加到结果列表中
              File[] foldResult = searchFile(subFolders[i], keyWord);
              for (int j = 0; j < foldResult.length; j++) {// 循环显示文件
                  result.add(foldResult[j]);// 文件保存到集合中
              }
          }
      }

      File files[] = new File[result.size()];// 声明文件数组,长度为集合的长度
      result.toArray(files);// 集合数组化
      return files;
  }
}


以上的是查找文件的方法,具体我没有去细看,大家可以自行百度;

第二步:就是我们利用已有的方法去调用,把我们的w录音名称带入文件中查找,先附上源码在细讲;

只有部分源码,我只截如何根据录音名是否存在文件中的方法,直接复制肯定报错,大家先理解思想。

package PublicPressureScript.WIFI;

import java.io.BufferedWriter;
package PublicPressureScript.Record;

import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;

import dengshengyu.Util.FileUtil;
import com.android.uiautomator.core.UiObject;
import com.android.uiautomator.core.UiSelector;
import com.android.uiautomator.testrunner.UiAutomatorTestCase;
import dengshengyu.Util.TextSearchFile;
/*
 * 项目名称:PublicPressureScript
 * 类名称:NewRecord
 * 类描述:连续播放录音文件
 * 创建人:享有盛誉之名
 * 创建时间:2017年8月15日 上午14:28
 * 备注:播放录音文件声音质量和状况代码无法检测;
 * @版本v0.0.1
 * 
 * */
public class NewRecord extends UiAutomatorTestCase {
	
	public void testNewRecord() throws Exception {
		
		int i=0;
		int j;
		int z = 0;
		int k = 0;
		String w;
		int count = 1 ;
		int count1 = 1 ;
		int count2 = 1 ;
		int count3 = 1 ;
		int count4 = 1 ;
		int count5 = 1 ;
	//home键返回主界面
        getUiDevice().pressHome();
        
       //杀掉原来进程,让录音机启动界面为初始界面
        Runtime.getRuntime().exec("am force-stop cn.zte.recorder");
        sleep(1000);
        Runtime.getRuntime().exec("am start cn.zte.recorder");
        sleep(1000);
        
        //获取控件全局变量
        UiObject newRecord = new UiObject(new UiSelector().resourceId("cn.zte.recorder:id/playingButton"));//停止后播放录音键
        UiObject RecordName = new UiObject(new UiSelector().resourceId("cn.zte.recorder:id/audio_name_text"));//录音后的文件名
        UiObject OnPlay = new UiObject(new UiSelector().resourceId("cn.zte.recorder:id/playingButton"));//录音后播放录音暂停
        
      //循环录音50次 
     for(;i<50;i++){//第二次后的录制循环
    	 
        sleep(300);
        getUiDevice().click(280,1048);//录音按钮
        sleep(5000);//录音5秒
        getUiDevice().click(541,1155);//停止按钮
        sleep(300);   
        

       
       //第二个测试预期结果:判断录音文件是否存储到手机目录中
       w=RecordName.getText();//获取录音后的文件名称Voice_20171025_104129
       System.out.print("File:"+w); 
       File folder = new File("sdcard/Recordings/"); //手机存储文件夹目录
       String keyword = w;
       File[] result = TextSearchFile.searchFile(folder, w);// 调用方法获得文件数组
//     System.out.println("zai " + folder + " yijisuoyouduixiangjihe" + keyword);    
      
       // TextSearchFile.countFiles 这个是查找该目录下所有文件个数
       //TextSearchFile.countFolders 这个是查找该目录下有几个文件夹
       // result.length 这个是查找符合w=RecordName.getText()名的文件个数长度   
 //自测此块代码,其他全部屏蔽,手机在录音后有录音文件名界面,使用cmd的adb删除文件命令 rm 删除掉,测试文件存在个不存在情况 System.out.println("ALL File:" + TextSearchFile.countFiles + "geWenJian," + TextSearchFile.countFolders + " geWenJianJia " + result.length + " geFuHeWenJian:"); 
if (result.length!=0) {// 判断符合文件名存在目录中的长度不等于0就是含有 
  FileUtil.out("/sdcard/dengshengyu/Record/录音保存成功.txt", "录音保存成功:"+count2+"次在手机‘sdcard/Recordings/’目录中;"); 
  System.out.println(" MuLucunzai:==>" + folder.getAbsolutePath()); 
  count2=count2+1;}
    else{ 
            FileUtil.out("/sdcard/dengshengyu/Record/录音保存失败.txt", "录音保存失败:"+count3+"次在手机‘sdcard/Recordings/’目录中;");
             System.out.println(folder.getAbsolutePath()+"==>MuLuBUcunzai"); 
            count3=count3+1; }
          }//for循环50次
 }
}







下面我们现在分解步骤去解释,每句代码都有注释,就不啰嗦了,肯定看的懂,不懂给我留言;
这里有两小步:第一步是先获取录音名称,然后存在w中;第二步是到指定文件夹目录中,在建个文件数组赋予result中;

//第二个测试预期结果:判断录音文件是否存储到手机目录中
       w=RecordName.getText();//获取录音后的文件名称Voice_20171025_104129
       System.out.print("File:"+w); //打印给自己看的结果,获取的文件名是否是对的;
       File folder = new File("sdcard/Recordings/"); //手机存储文件夹目录
       String keyword = w;
       File[] result = TextSearchFile.searchFile(folder, w);// 调用方法获得文件数组


然后我们就要做判断了,如何判断?
System.out.println("ALL File:" + TextSearchFile.countFiles + "geWenJian," +TextSearchFile.countFolders + " geWenJianJia " +result.length + " geFuHeWenJian:");
这句语句很重要,根据我们公共方法类获取的,我们先理解这是什么意思先,理解这些方法名是什么意思:

解释如下:
1.TextSearchFile.countFiles 这个是查找该目录下所有文件个数
2.TextSearchFile.countFolders 这个是查找该目录下有几个文件夹
3.result.length 这个是查找符合w=RecordName.getText()名的文件个数长度
从上面方法名我们知道,第1个TextSearchFile.countFiles 信息很重要,是文件个数,因为我们的录音文件是属于文件,而不是文件夹,所以除了第1个方法对我们有用。
那么怎么用?
刚刚我们把文件名称放到w中,又把w文件名转换为文件数组,即文件形式result。这样我们可以这么想,要是该文件夹中,存在我们录音文件的个数为0就是不存在录音文件,也就是result不等于0,说明文件夹中就含有我们的录音文件,这里先不管有几个,不可能是两个,因为文件名不允许一样,这个就不纠结。
我们用if语句判断result.length!=0就说明改文件存在于文件夹中。是不是很简单?

/自测此块代码,其他全部屏蔽,手机在录音后有录音文件名界面,使用cmd的adb删除文件命令 rm 删除掉,测试文件存在个不存在情况
       System.out.println("ALL File:" + TextSearchFile.countFiles + "geWenJian," + TextSearchFile.countFolders + " geWenJianJia " + result.length + " geFuHeWenJian:");
        if (result.length!=0) {// 判断符合文件名存在目录中的长度不等于0就是含有
        	FileUtil.out("/sdcard/dengshengyu/Record/录音保存成功.txt", "录音保存成功:"+count2+"次在手机‘sdcard/Recordings/’目录中;");
            System.out.println(" MuLucunzai:==>" + folder.getAbsolutePath());
            count2=count2+1;
//          return;
        }else{
        	FileUtil.out("/sdcard/dengshengyu/Record/录音保存失败.txt", "录音保存失败:"+count3+"次在手机‘sdcard/Recordings/’目录中;");
        	System.out.println(folder.getAbsolutePath()+"==>MuLuBUcunzai");
        	count3=count3+1;
        }

最后把结果记录生成到指定文件夹中保存(请查看我另篇文章,uiautomator测试判断结果后保存入指定文件夹路径中  )


大家以为这样就结束了?身为一个代码编写角色,肯定要自测下代码是否有实现啊,自测都不自测怎么指定成功;

代码自测部分:
把所有含操作相关的代码都注释掉,只留判断这块,手机当前界面要是已经录音好的,如上面第一个图一样的界面,这样我们就可以开始测试了;
测试代码屏蔽后,大概是这样的

package PublicPressureScript.WIFI;

import java.io.BufferedWriter;
package PublicPressureScript.Record;

import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;

import Gota.Util.FileUtil;
import com.android.uiautomator.core.UiObject;
import com.android.uiautomator.core.UiSelector;
import com.android.uiautomator.testrunner.UiAutomatorTestCase;
import Gota.Util.TextSearchFile;
/*
 * 项目名称:PublicPressureScript
 * 类名称:NewRecord
 * 类描述:连续播放录音文件
 * 创建人:享有盛誉之名
 * 创建时间:2017年8月15日 上午14:28
 * 备注:播放录音文件声音质量和状况代码无法检测;
 * @版本v0.0.1
 * 
 * */
public class NewRecord extends UiAutomatorTestCase {
	
	public void testNewRecord() throws Exception {
		
		int i=0;
		int j;
		int z = 0;
		int k = 0;
		String w;
		int count = 1 ;
		int count1 = 1 ;
		int count2 = 1 ;
		int count3 = 1 ;
		int count4 = 1 ;
		int count5 = 1 ;
        
        //获取控件全局变量
        UiObject RecordName = new UiObject(new UiSelector().resourceId("cn.zte.recorder:id/audio_name_text"));//录音后的文件名

       //第二个预期结果:判断录音文件是否存储到手机目录中
       w=RecordName.getText();//获取录音后的文件名称Voice_20171014_131251
       System.out.print("File:"+w); 
       File folder = new File("sdcard/Recordings/");// 手机存储文件夹目录
       String keyword = w;
       File[] result = TextSearchFile.searchFile(folder, w);// 调用方法获得文件数组
	   
       //自测此块代码,其他全部屏蔽,手机在录音后有录音文件名界面,使用cmd的adb删除文件命令 rm 删除掉,测试文件存在个不存在情况
       System.out.println("ALL File:" + TextSearchFile.countFiles + "geWenJian," + TextSearchFile.countFolders + " geWenJianJia " + result.length + " geFuHeWenJian:");
        if (result.length!=0) {// 判断符合文件名存在目录中的长度不等于0就是含有
        	FileUtil.out("/sdcard/dengshengyu/Record/录音保存成功.txt", "录音保存成功:"+count2+"次在手机‘sdcard/Recordings/’目录中;");
            System.out.println(" MuLucunzai:==>" + folder.getAbsolutePath());
            count2=count2+1;
//          return;
        }else{
        	FileUtil.out("/sdcard/dengshengyu/Record/录音保存失败.txt", "录音保存失败:"+count3+"次在手机‘sdcard/Recordings/’目录中;");
        	System.out.println(folder.getAbsolutePath()+"==>MuLuBUcunzai");
        	count3=count3+1;
        }

       
 }
}

然后先保存,执行uiautomator编译(这个不用我讲了,肯定都会)

怎么测试?

第一步:该录音文件肯定已经保存到指定文件夹中,所以我们此时就验证,当文件存在的情况,代码能不能判断出;
  运行uiautomator,当前界面的结果肯定显示 ”MuLucunzai:==>xxx文件夹中“,第二个查看手机文件,我们不是把结果记录保存到文件夹中了吗,到该文件夹查看肯定有文件记录 ”录音保存成功.txt“,内容有成功次数;
当文件存在的情况,判断这块肯定成功;


第二步:我们手动从文件夹中删除掉该录音文件,记住,别动手机,采用cmd的方法,用”adb shll rem 文件路径 文件名"的方法去删除该录音文件(不会这adb删除方法请自行百度)。文件删除后,那就是当文件不存在的情况,代码是否能判断出结果:
 运行uiautomator,当前界面的结果肯定显示 ”xxx文件夹中==>MuLuBUcunzai“,第二个查看手机文件,我们不是把结果记录保存到文件夹中了吗,到该文件夹查看肯定有文件记录 ”录音保存失败.txt“,内容有失败次数;


以上两步验证的结果都符合,那恭喜你,你的代码通过验证了。
 

---------------------------------完,不明白的给我留言·······················

作者:享有盛誉之名
转载请著名出处
 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试狂人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值