精华内容
下载资源
问答
  • 我们在测试一些项目会自动保存到文件夹中,如:录音、录像、拍照等,都自动保存到指定路径中,我们该如何判断是否已经保存到指定目录中呢?或者说指定目录中是否含有我们要的文件呢? 首先考虑一个就是保存到指定...

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

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

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

    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“,内容有失败次数;


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


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

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


    展开全文
  • 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例233 进入Windows系统前发出警告 325 实例234 实现注销、关闭和重启计算机 326 7.2 获得磁盘属性 ...
  • C#程序开发范例宝典(第2版).part02

    热门讨论 2012-11-12 07:55:11
    实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例233 进入Windows系统前发出警告 325 实例234 实现注销、关闭和重启计算机 326 7.2 获得磁盘...
  • C#程序开发范例宝典(第2版).part13

    热门讨论 2012-11-12 20:17:14
    实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例233 进入Windows系统前发出警告 325 实例234 实现注销、关闭和重启计算机 326 7.2 获得磁盘...
  • 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例233 进入Windows系统前发出警告 325 实例234 实现注销、关闭和重启计算机 326 7.2 获得磁盘...
  • 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例233 进入Windows系统前发出警告 325 实例234 实现注销、关闭和重启计算机 326 7.2 获得磁盘...
  • 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例233 进入Windows系统前发出警告 325 实例234 实现注销、关闭和重启计算机 326 7.2 获得磁盘...
  • 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例233 进入Windows系统前发出警告 325 实例234 实现注销、关闭和重启计算机 326 7.2 获得磁盘...
  • 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例233 进入Windows系统前发出警告 325 实例234 实现注销、关闭和重启计算机 326 7.2 获得磁盘...
  • 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例233 进入Windows系统前发出警告 325 实例234 实现注销、关闭和重启计算机 326 7.2 获得磁盘...
  • 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例233 进入Windows系统前发出警告 325 实例234 实现注销、关闭和重启计算机 326 7.2 获得磁盘...
  • 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例233 进入Windows系统前发出警告 325 实例234 实现注销、关闭和重启计算机 326 7.2 获得磁盘...
  • 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例233 进入Windows系统前发出警告 325 实例234 实现注销、关闭和重启计算机 326 7.2 获得磁盘...
  • 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例233 进入Windows系统前发出警告 325 实例234 实现注销、关闭和重启计算机 326 7.2 获得磁盘...
  • 程序开发范例宝典>>

    2012-10-24 10:41:28
    实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例233 进入Windows系统前发出警告 325 实例234 实现注销、关闭和重启计算机 326 7.2 ...
  • 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例233 进入Windows系统前发出警告 325 实例234 实现注销、关闭和重启计算机 326 7.2 获得...
  • 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例233 进入Windows系统前发出警告 325 实例234 实现注销、关闭和重启计算机 326 7.2 获得...
  • 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例233 进入Windows系统前发出警告 325 实例234 实现注销、关闭和重启计算机 326 7.2 获得...
  • 实例338 利用语音卡实现电话录音 实例339 利用语音卡实现点歌祝福 12.7 手机程序的开发 实例340 利用短信猫发送短信 实例341 利用短信远程关闭计算机 12.8 其他程序 实例342 利用神龙卡制作练歌房程序 ...
  • 实例338 利用语音卡实现电话录音 实例339 利用语音卡实现点歌祝福 12.7 手机程序的开发 实例340 利用短信猫发送短信 实例341 利用短信远程关闭计算机 12.8 其他程序 实例342 利用神龙卡制作练歌房...
  • 实例338 利用语音卡实现电话录音 实例339 利用语音卡实现点歌祝福 12.7 手机程序的开发 实例340 利用短信猫发送短信 实例341 利用短信远程关闭计算机 12.8 其他程序 实例342 利用神龙卡制作练歌房程序 ...
  •  实例093 获取控件名称和内容 124  第3章 组件应用 127  3.1 BackgroundWorker组件 128  实例094 BackgroundWorker组件执行异步操作 128  3.2 ErrorProvider组件 130  实例095 使用ErrorProvider...
  • 实例338 利用语音卡实现电话录音 实例339 利用语音卡实现点歌祝福 12.7 手机程序的开发 实例340 利用短信猫发送短信 实例341 利用短信远程关闭计算机 12.8 其他程序 实例342 利用神龙卡制作练歌房程序 ...
  • 实例338 利用语音卡实现电话录音 实例339 利用语音卡实现点歌祝福 12.7 手机程序的开发 实例340 利用短信猫发送短信 实例341 利用短信远程关闭计算机 12.8 其他程序 实例342 利用神龙卡制作...
  • 实例338 利用语音卡实现电话录音 实例339 利用语音卡实现点歌祝福 12.7 手机程序的开发 实例340 利用短信猫发送短信 实例341 利用短信远程关闭计算机 12.8 其他程序 实例342 利用神龙卡制作练歌房程序 ...
  • 实例338 利用语音卡实现电话录音 实例339 利用语音卡实现点歌祝福 12.7 手机程序的开发 实例340 利用短信猫发送短信 实例341 利用短信远程关闭计算机 12.8 其他程序 实例342 利用神龙卡制作练歌房程序 ...
  • 实例338 利用语音卡实现电话录音 实例339 利用语音卡实现点歌祝福 12.7 手机程序的开发 实例340 利用短信猫发送短信 实例341 利用短信远程关闭计算机 12.8 其他程序 实例342 利用神龙卡制作练歌房程序 ...
  •  cc实例150 修改文件及目录的名称   5.6 文件的读取与保存   cc实例151 顺序读取文件   cc实例152 制作日志文件   5.7 文件管理   cc实例153 分类整理磁盘文件   cc实例154 计算机磁盘空间报警...
  •  cc实例150 修改文件及目录的名称   5.6 文件的读取与保存   cc实例151 顺序读取文件   cc实例152 制作日志文件   5.7 文件管理   cc实例153 分类整理磁盘文件   cc实例154 计算机磁盘空间报警...
  •  cc实例150 修改文件及目录的名称   5.6 文件的读取与保存   cc实例151 顺序读取文件   cc实例152 制作日志文件   5.7 文件管理   cc实例153 分类整理磁盘文件   cc实例154 计算机磁盘空间报警...

空空如也

空空如也

1 2
收藏数 40
精华内容 16
关键字:

手机录音文件夹名称