• 关于robotium测试工具的使用


     

    部分文档在: http://pan.baidu.com/s/1o8cETmy

    电脑的环境变量配置
    1. 配置ANDROID_HOME为android 软件开发工具包的目录,例如:D:android-sdk
    2. 配置JAVA_HOME为java程序开发的工具包目录,例如:C:Program FilesJavajdk1.8.0_11
    3. 在path下添加这两个:
    %Java_home%in;%ANDROID_HOME% ools;%ANDROID_HOME%platform-tools;
    4.如果已经存在APK,要测试到手机端的运行,用如下软件,拖到该APK上,
    把如下的info记下来(有时候会报报sdk/tools/zipalign 找不到的错误),下载一个zipalign。
     
     5.会生成一个新的apk给手机装上
    6.把步骤4生成的
    com.sohu.newsclient 和
    com.sohu.newsclient.SplashActivity
    修改mainfest文件的内容,如下图
     
    7.在src中新建类。具体例子如下
      1 package com.example.a.test;
      2 import java.util.ArrayList;
      3 import com.robotium.solo.Solo;
      4 import android.os.SystemClock;
      5 import android.test.ActivityInstrumentationTestCase2;
      6 import android.util.Log;
      7 import android.view.View;
      8 import android.widget.TextView;
      9 
     10 public class N00_TestTemplate extends  ActivityInstrumentationTestCase2{
     11     //声明一个Solo对象,Solo实例封装了所有Robotium的可用方法
     12     private Solo solo;
     13     /**
     14      * 注意以下两个静态常量字符串
     15     * 第一个是要测试的包名,和刚刚在AndroidMainfest里配置的包名一直
     16     * 第二是被测程序的入口类
     17     * 以下是搜狐新闻的包名和入口类
     18     */
     19     private static final String TARGET_PACKAGE_ID="com.sohu.newsclient";
     20     private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME="com.sohu.newsclient.app.SplashActivity";
     21     //声明一个Class类型的变量,用于ActivityInstrumentationTestCase2加载启动被测程序
     22     private static Class launcherActivityClass;
     23     //声明一个标签用于日志的输出控制,便于调试
     24     final String TAG="Test->N00";
     25     //静态加载auncherActivityClass也就是被测程序主类
     26     static{
     27         try {
     28             launcherActivityClass = Class
     29                     .forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
     30         } catch (ClassNotFoundException e) {
     31             throw new RuntimeException(e);
     32         }
     33     }
     34     //构造函数,传入TARGET_PACKAGE_ID,launcherActivityClass即可
     35     public N00_TestTemplate ()
     36     {
     37         super(TARGET_PACKAGE_ID,launcherActivityClass);            
     38     }
     39     //这个必须有,在测试用例初始时执行,我们在这里初始化了Solo实例
     40     public void setUp() throws Exception {    
     41         solo = new Solo(getInstrumentation(), getActivity());
     42     }    
     43     //这个也必须有,在测试用例执行完毕执行,我们在这里销毁了测试中建立的所有实例,清除垃圾
     44     public void tearDown() throws Exception {
     45         solo.finishOpenedActivities();
     46     }
     47     /**
     48      * 向左滑动“滑动继续阅读”文本条划过第一页
     49      * 向下滚动30条然后日志输出页面内容
     50      * 
     51      */
     52     public void test2(){
     53         solo.sleep(2000);
     54         Log.d(TAG,"test2  runing");
     55     }
     56     public void test1(){
     57         solo.sleep(2000);
     58         Log.d(TAG,"test1  runing");
     59     }
     60     
     61     public void test(){    
     62         solo.sleep(1000);
     63         assertTrue("文字没有出现",solo.waitForText("滑动继续阅读"));                                            //等待“滑动继续阅读”文字条的出现
     64         
     65         long startTime=SystemClock.uptimeMillis();                                                                        //记录现在的时间
     66         
     67         String  activityName=solo.getCurrentActivity().getClass().getName();                                //得到正在执行的Activity类名
     68         
     69         Log.d(TAG, "此Activity类名:"+activityName);                                                                    //日志输出Activity类名        
     70         
     71         solo.sleep(1000);
     72         
     73         solo.takeScreenshot("001");                                                                                                    //截屏
     74                                                                                                     
     75         TextView tv=solo.getText("滑动继续阅读");                                                    //获取滑动继续阅读文字条
     76         
     77         assertTrue("获取失败",tv!=null);                                                                                        //检查是否获取成功
     78         
     79         solo.scrollViewToSide(tv, solo.LEFT);                                                                                        //向左滑动
     80         
     81         solo.sleep(500);                                                                                                                    //线程休眠500ms,保证Activity完成切换
     82         
     83         String  activityName1=solo.getCurrentActivity().getClass().getName();                                //得到正在执行的Activity类名
     84         
     85         Log.d(TAG, "此Activity类名:"+activityName1);                                                                    //日志输出类名
     86         
     87         assertTrue("滑动失败",!activityName.equals(activityName1));                                                        //判断Activity已经改变
     88         
     89         solo.sleep(2000);
     90         
     91         if(!solo.getText("刊物").isFocused())
     92         {
     93             solo.clickOnText("刊物");
     94         }
     95         
     96         if(!solo.searchText("央视财经")) 
     97         {
     98             solo.takeScreenshot("003");
     99             solo.clickOnScreen(100, 100);                                                //如果第一次将出现黑色屏保,点击它,继续    
    100         }
    101         solo.sleep(5000);
    102         
    103         assertTrue("点击失败或加载速度太慢",solo.searchText("央视财经"));
    104         
    105         long endTime=SystemClock.uptimeMillis();                                                                            //记录现在时间
    106         
    107         Log.d(TAG, "动作用时:"+(endTime-startTime)+"ms");                                                        //日志输出动作用时
    108         
    109         solo.sleep(10000);                                                                                                                    //休眠十秒,给手机联网更新页面时间
    110         
    111         solo.takeScreenshot("002");                                                                                                    //截屏,取名002
    112         
    113         solo.sleep(1000);                                                                                                                        //休眠一秒
    114         
    115         ArrayList<View> listViews=solo.getCurrentViews();                                                    //获取当前页面的ListView
    116         
    117         assertTrue("没有ListView",listViews!=null);                                                                            //检查listVieW不为空
    118         
    119 //        for(int i=0;i<listViews.size();i++)
    120 //        {
    121 //            if(listViews.get(i).getContext()>30)                                                                                        //获取列表
    122 //            {
    123 //                solo.scrollListToLine(listViews.get(i),29);    
    124 //                //滚动到第29行
    125 //            }
    126 //        }
    127         printAllViews();                                                                                                                        //日志输出当前页面信息
    128     }        
    129 
    130     /**
    131       * 日志输出页面中所有View的信息
    132       */
    133     public  void printAllViews()
    134     {
    135         Log.d(TAG, "以下是此页面的所有View信息");
    136         ArrayList<View> views=solo.getViews();
    137         assertTrue("获取失败",views!=null);    
    138         if(views!=null){
    139             for (int i = 0; i < views.size(); i++) {
    140                 if(((View) views.get(i))!=null){
    141                 
    142                 String id = ((View) views.get(i)).getId() + "";
    143                 String name = ((View) views.get(i)).getClass().getName();    
    144                 Log.d(TAG, "Id:" + id);
    145                 Log.d(TAG, "Name:" + name);
    146                 //输出所有文字
    147                 if(views.get(i) instanceof  TextView)
    148                 {
    149                     Log.d(TAG, ((TextView)views.get(i)).getText().toString());
    150                     solo.takeScreenshot("004");    
    151                 }
    152                 }            
    153             }
    154         }
    155     }
    156 }
  • 相关阅读:
    IDEA学习和收藏夹
    mysql资料收集及学习
    一些模板代码
    docker学习
    Spring事务传播类型
    rust学习疑惑
    [重新做人]从头学习JAVA SE——java.lang.reflect
    java核心技术卷一
    Spring实战 难懂的JavaBean
    Spring实战系列
  • 原文地址:https://www.cnblogs.com/xiaolexiaojia/p/7655643.html
Copyright © 2020-2023  润新知