
部分文档在: 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 }