Robotium是一款国外的Android自动化测试框架,主要针对Android平台的应用进行黑盒自动化测试,它提供了模拟各种手势操作(点击、长按、滑动等)、查找和断言机制的API,能够对各种控件进行操作。Robotium结合Android官方提供的测试框架达到对应用程序进行自动化的测试。另外,Robotium 4.0版本已经支持对WebView的操作。Robotium 对Activity,Dialog,Toast,Menu 都是支持的。
源码获取:http://code.google.com/p/robotium/
源API文档:http://robotium.googlecode.com/svn/doc/index.html
robotium5.1下载和最新API文档:http://pan.baidu.com/s/1bnlO8MF
官方例子记事本:http://pan.baidu.com/s/1qWLVL72
重签名工具:http://pan.baidu.com/s/1i3H0tKD
1.等待timeout毫秒一个名字为name的Activity启动: waitForActivity(String name, int timeout)
实例:assertTrue("无法启动启动类", solo.waitForActivity ("MainActivity", 30000));
2.Robotium将睡眠设置的毫秒数:sleep(int time)
实例:solo.sleep(5000)
3.清空EditText的内容:clearEditText(android.widget.EditText editText)
实例:solo.clearEditText((EditText)solo.getView ("edtInsertName"))
4.根据按钮上的文字点击按钮:clickOnButton(String text)
实例:solo.clickOnButton("^绿色$");
5.根据文字点击控件:clickOnText(String text)
实例:solo.clickOnText("控件上显示文字");
6.输入内容:enterText(android.widget.EditText editText, String text)
solo.enterText((EditText)solo.getView("edtInsertName"), "说些什么好呢?");
7.返回:goBack()
8.截屏并保存为设置的名字:takeScreenshot(String name)
默认保存在: /sdcard/Robotium-Screenshots/
9.解锁屏幕:unlockScreen()
被测试项目为demo1,下面是实战的具体步骤
package com.example.demo1.test;
import com.robotium.solo.Solo;
import android.test.ActivityInstrumentationTestCase2;
import android.widget.EditText;
@SuppressWarnings("rawtypes")
public class TestDemo1Apk extends ActivityInstrumentationTestCase2 {
private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "com.example.demo1.MainActivity";//启动类
private static Class<?> launcherActivityClass;
static{
try {
launcherActivityClass = Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
@SuppressWarnings("unchecked")
public TestDemo1Apk() throws ClassNotFoundException {
super(launcherActivityClass);
}
private Solo solo;
@Override
protected void setUp() throws Exception {
solo = new Solo(getInstrumentation(), getActivity());
}
public void testcase001() throws Exception {
//等待 Activity "MainActivity" 启动
assertTrue("无法启动启动类", solo.waitForActivity("MainActivity", 30000));
solo.sleep(5000);
//输入文字:"131243"
solo.enterText((EditText)solo.getView("edtInsertName"), "说些什么好呢?");
solo.sleep(2000);
//清空输入框的内容
solo.clearEditText((EditText)solo.getView("edtInsertName"));
//按下 按钮 "绿色"
solo.clickOnButton("^绿色$");
solo.sleep(2000);
//按下 按钮 "黄色"
solo.clickOnButton("^黄色$");
solo.sleep(2000);
//按下 按钮 "蓝色"
solo.clickOnButton("^蓝色$");
solo.sleep(2000);
//按下 TextView "看我变变变~~~"
solo.clickOnText("^看我变变变~~~$");
solo.sleep(5000);
}
@Override
public void tearDown() throws Exception {
solo.finishOpenedActivities();
}
}
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.example.demo1" />
源码下载:http://pan.baidu.com/s/1ybPUI
被测试项目为demo1,下面是实战的具体步骤
Eclipse-File-Project-Android Test Project
测试项目名为demo1Test,测试目标项目选择demo1
(1)在项目中新建lib目录,把robotium-solo-5.1.jar和robotium-solo-5.1-javadoc.jar拉进该目录。
(2)添加junit4





右键点击包-New-JUnit Test Case

最基础的测试用例框架类
package com.example.demo1.test;
import com.example.demo1.MainActivity;//导入目标项目的启动类
import android.test.ActivityInstrumentationTestCase2;
import com.robotium.solo.Solo;
public class TestDemo1 extends ActivityInstrumentationTestCase2<MainActivity>{//继承目标项目的启动类
private Solo solo;//初始化一个solo对象
public TestDemo1() {//在构造函数处标明继承自目标项目的启动类
super(MainActivity.class);
}
@Override
public void setUp() throws Exception {//在测试开始之前会调用这个方法,这里来创建一个Solo对象
solo = new Solo(getInstrumentation(), getActivity());
}
@Override
public void tearDown() throws Exception {//一个测试用例结束的时候会调用这个方法
solo.finishOpenedActivities();//这个方法将结束掉所有在测试执行过程中打开的activity
}
}
在基础测试类里面添加相关的测试方法,也就是真正在执行的测试用例
package com.example.demo1.test;
import com.example.demo1.MainActivity;//导入目标项目的启动类
import android.test.ActivityInstrumentationTestCase2;
import android.widget.EditText;
import com.robotium.solo.Solo;
public class TestDemo1 extends ActivityInstrumentationTestCase2<MainActivity>{//继承目标项目的启动类
private Solo solo;//初始化一个solo对象
public TestDemo1() {//在构造函数处标明继承自目标项目的启动类
super(MainActivity.class);
}
@Override
public void setUp() throws Exception {//在测试开始之前会调用这个方法,这里来创建一个Solo对象
solo = new Solo(getInstrumentation(), getActivity());
}
public void testcase001() throws Exception {
//等待 Activity "MainActivity" 启动
assertTrue("无法启动启动类", solo.waitForActivity("MainActivity", 30000));
solo.sleep(5000);
//输入文字:"131243"
solo.enterText((EditText)solo.getView("edtInsertName"), "说些什么好呢?");
solo.sleep(2000);
//清空输入框的内容
solo.clearEditText((EditText)solo.getView("edtInsertName"));
//按下 按钮 "绿色"
solo.clickOnButton("^绿色$");
solo.sleep(2000);
//按下 按钮 "黄色"
solo.clickOnButton("^黄色$");
solo.sleep(2000);
//按下 按钮 "蓝色"
solo.clickOnButton("^蓝色$");
solo.sleep(2000);
//按下 TextView "看我变变变~~~"
solo.clickOnText("^看我变变变~~~$");
solo.sleep(5000);
}
@Override
public void tearDown() throws Exception {//一个测试用例结束的时候会调用这个方法
solo.finishOpenedActivities();//这个方法将结束掉所有在测试执行过程中打开的activity
}
}
源码共享:http://pan.baidu.com/s/1mgKcgju

public TestHelloWorldCase() {
super(HerlloActivity.class);
}
右键点击项目-Build Path-configure Build Path


robotium的getCurrentListViews
1.版本3.6版本和4.1以上版本的表达方式
3.6版本:ArrayList<ListView> lw = solo.getCurrentListViews();
4.1版本以上:ArrayList<ListView> lw = solo.getCurrentViews(ListView.class);
还有如:
ArrayList<ImageView> imageList=solo.getCurrentViews(ImageView.class);得到的即是ImageView
ArrayList<ImageView> imageList=solo.getCurrentViews(ImageView.class,parentView);
(1)Android 实用工具Hierarchy Viewer实战
(2)运行命令行记录log,然后点击对应Activity,接着可以在logcat看到
原文:http://www.cnblogs.com/ITGirl00/p/4337541.html