b. 加入Robotium.jar(下载地址)
下载Robotium.jar,然后在测试工程目录创建一个Robotium的文件夹(其他名字也可以,但是不要使用lib这个名字,它是特殊文件夹),并将Robotium.jar拷贝过去。然后把这个jar包,加入到工程的build path中。具体方法:右键点击测试工程,选择properties,在Libraries选项中,点击Add JARs添加,如下图:
然后打开MtsAutomationTest.java 并拷贝以下代码:
- [backcolor=transparent]package[backcolor=transparent] com[backcolor=transparent].[backcolor=transparent]jayway[backcolor=transparent].[backcolor=transparent]test[backcolor=transparent].[backcolor=transparent]test[backcolor=transparent];
- [backcolor=transparent]import[backcolor=transparent] com[backcolor=transparent].[backcolor=transparent]robotium[backcolor=transparent].[backcolor=transparent]solo[backcolor=transparent].[backcolor=transparent]Solo[backcolor=transparent];
- [backcolor=transparent]import[backcolor=transparent] android[backcolor=transparent].[backcolor=transparent]test[backcolor=transparent].[backcolor=transparent]ActivityInstrumentationTestCase2[backcolor=transparent];
- [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]class[backcolor=transparent] [backcolor=transparent]MtsAutomationTest[backcolor=transparent] [backcolor=transparent]extends[backcolor=transparent] [backcolor=transparent]ActivityInstrumentationTestCase2[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]private[backcolor=transparent] [backcolor=transparent]Solo[backcolor=transparent] solo[backcolor=transparent];
- [backcolor=transparent] [backcolor=transparent]private[backcolor=transparent] [backcolor=transparent]final[backcolor=transparent] [backcolor=transparent]static[backcolor=transparent] [backcolor=transparent]String[backcolor=transparent] lanchActivity [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]"com.alibaba.mts.mtsdemoapp.MainActivity"[backcolor=transparent];
- [backcolor=transparent] [backcolor=transparent]// 通过反射的方式,找到可以启动的Activity的Class.
- [backcolor=transparent] [backcolor=transparent]private[backcolor=transparent] [backcolor=transparent]static[backcolor=transparent] [backcolor=transparent]Class[backcolor=transparent]<?>[backcolor=transparent] launcherActivityClass[backcolor=transparent];
- [backcolor=transparent] [backcolor=transparent]static[backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]try[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] launcherActivityClass [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]Class[backcolor=transparent].[backcolor=transparent]forName[backcolor=transparent]([backcolor=transparent]lanchActivity[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]}[backcolor=transparent] [backcolor=transparent]catch[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]ClassNotFoundException[backcolor=transparent] e[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]throw[backcolor=transparent] [backcolor=transparent]new[backcolor=transparent] [backcolor=transparent]RuntimeException[backcolor=transparent]([backcolor=transparent]e[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent] [backcolor=transparent]@SuppressWarnings[backcolor=transparent]([backcolor=transparent]"unchecked"[backcolor=transparent])
- [backcolor=transparent] [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]MtsAutomationTest[backcolor=transparent]()[backcolor=transparent] [backcolor=transparent]throws[backcolor=transparent] [backcolor=transparent]ClassNotFoundException[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]super[backcolor=transparent]([backcolor=transparent]launcherActivityClass[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent] [backcolor=transparent]@Override
- [backcolor=transparent] [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]void[backcolor=transparent] setUp[backcolor=transparent]()[backcolor=transparent] [backcolor=transparent]throws[backcolor=transparent] [backcolor=transparent]Exception[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]//setUp() 先于测试用例的执行, 用于初始化环境
- [backcolor=transparent] [backcolor=transparent]//solo对象在这里被创建出来
- [backcolor=transparent] solo [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]new[backcolor=transparent] [backcolor=transparent]Solo[backcolor=transparent]([backcolor=transparent]getInstrumentation[backcolor=transparent](),[backcolor=transparent] getActivity[backcolor=transparent]());
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent] [backcolor=transparent]@Override
- [backcolor=transparent] [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]void[backcolor=transparent] tearDown[backcolor=transparent]()[backcolor=transparent] [backcolor=transparent]throws[backcolor=transparent] [backcolor=transparent]Exception[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]//tearDown() 是执行完所有的测试用例之后被执行。
- [backcolor=transparent] [backcolor=transparent]//finishOpenedActivities() 会终止在测试期间打开的所有的activities.
- [backcolor=transparent] solo[backcolor=transparent].[backcolor=transparent]finishOpenedActivities[backcolor=transparent]();
- [backcolor=transparent] [backcolor=transparent]}[backcolor=transparent]
- [backcolor=transparent]}
把launchActivity字符串替换为,被测APP的launchable-activity,比如本次使用的APP的启动Activity:"com.alibaba.mts.mtsdemoapp.MainActivity"。
然后,我们在MtsAutomationTest.java文件中添加一条测试用例: 添加一个函数testLogin(所有的测试case的函数名都要以test开始,testXXX的格式):
- [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]void[backcolor=transparent] testLogin[backcolor=transparent]()[backcolor=transparent] [backcolor=transparent]throws[backcolor=transparent] [backcolor=transparent]Exception[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]// 启动之后,等待5s,UI界面稳定下来
- [backcolor=transparent] solo[backcolor=transparent].[backcolor=transparent]sleep[backcolor=transparent]([backcolor=transparent]5000[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]// 图例3.3.1:在文字“Tab4”上点击,进入登录页
- [backcolor=transparent] solo[backcolor=transparent].[backcolor=transparent]clickOnText[backcolor=transparent]([backcolor=transparent]"Tab4"[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]// Activity切换时,最好等待一会儿。否则,某些异步元素可能还没加载
- [backcolor=transparent] solo[backcolor=transparent].[backcolor=transparent]sleep[backcolor=transparent]([backcolor=transparent]5000[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]// 图例3.3.2:此Activity中只有两个EditText控件,索引0是用户名控件。
- [backcolor=transparent] [backcolor=transparent]EditText[backcolor=transparent] user [backcolor=transparent]=[backcolor=transparent] solo[backcolor=transparent].[backcolor=transparent]getEditText[backcolor=transparent]([backcolor=transparent]0[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]// enterText用于向EditText控件中输入内容,用户名为:admin
- [backcolor=transparent] solo[backcolor=transparent].[backcolor=transparent]enterText[backcolor=transparent]([backcolor=transparent]user[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"admin"[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]//图例3.3.2:索引1是密码控件
- [backcolor=transparent] [backcolor=transparent]EditText[backcolor=transparent] pwd [backcolor=transparent]=[backcolor=transparent] solo[backcolor=transparent].[backcolor=transparent]getEditText[backcolor=transparent]([backcolor=transparent]1[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]// 密码也是:admin
- [backcolor=transparent] solo[backcolor=transparent].[backcolor=transparent]enterText[backcolor=transparent]([backcolor=transparent]pwd[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"admin"[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]// 点击包含“登录”文字的控件。如果Activity中包含多个“登录”,我们需要指定控件索引,像下面数字2。这个索引可能需要尝试几次获取。
- [backcolor=transparent] solo[backcolor=transparent].[backcolor=transparent]clickOnText[backcolor=transparent]([backcolor=transparent]"登陆"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]2[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]// 图例3.3.3: 测试完成之后,等待5s结束。一般登录需要跟后台交互,这里的等待是这个目的。
- [backcolor=transparent] solo[backcolor=transparent].[backcolor=transparent]sleep[backcolor=transparent]([backcolor=transparent]5000[backcolor=transparent]);
- [backcolor=transparent]}
除了上面几种获取控件的方法,还有一种常用的,通过resource-id获取控件的方法:
- [backcolor=transparent]Activity[backcolor=transparent] act[backcolor=transparent]=[backcolor=transparent]solo[backcolor=transparent].[backcolor=transparent]getCurrentActivity[backcolor=transparent]();
- [backcolor=transparent]TextView[backcolor=transparent] loginView [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]TextView[backcolor=transparent])[backcolor=transparent] solo[backcolor=transparent].[backcolor=transparent]getView[backcolor=transparent]([backcolor=transparent]act[backcolor=transparent].[backcolor=transparent]getResources[backcolor=transparent]().[backcolor=transparent]getIdentifier[backcolor=transparent]([backcolor=transparent]"login"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"id"[backcolor=transparent],[backcolor=transparent] act[backcolor=transparent].[backcolor=transparent]getPackageName[backcolor=transparent]()))