关于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 }
原文地址:https://www.cnblogs.com/xiaolexiaojia/p/7655643.html