最近开始了解RobotiumRobotiumandroid的自动化框架,里面封装了很多api,方便我们使用。下面是我实践的结果,记录了其中出现过的问题,便于以后自己查阅。网上出现的很多是官方的demo,如果找不到,其实也可以用自己写的android小程序进行练习。

一.提前准备

   1.robotium-solo-5.3.1.jar

   2.android模拟器或真机

   3.android sdk配置 platform-toolstools

二.建立一个android test project

   1.点击File——new——android test project

   2.输入项目名

   3.这里有2个选择,点击第二个,选中你要测试的项目

   4.点击next,选择sdk,点击完成

   5.此时的包是空的,建立一个测试类,new——junit test case。

     Robotium的测试类ActivityInstrumentationTestCase2继承了junit3的TestCase类

三.实现代码,这里以官方demo为例

package com.example.android.notepad.test;


import com.example.android.notepad.NotesList;
import com.robotium.solo.Solo;
import android.test.ActivityInstrumentationTestCase2;

public class Robotiumtest extends ActivityInstrumentationTestCase2<NotesList> {
    private Solo solo;
    public Robotiumtest() {
        //NotesList是Demo中启动时的activity
        super(NotesList.class);

    }

    protected void setUp() throws Exception {
        
        solo=new Solo(getInstrumentation(),getActivity());
    }

    protected void tearDown() throws Exception {
        //每执行一个case就关闭全部的activity
        solo.finishOpenedActivities();
    }
    
    
    //添加
    public void testAddNote(){
        //阻止锁屏
        solo.unlockScreen();
        //点击菜单
        solo.clickOnMenuItem("Add note");
        //添加断言,判断当前的activity
        solo.assertCurrentActivity("Expected NoteEditor activity", "NoteEditor"); 
        //在文本框中输入Note1
        solo.enterText(0, "Note1");
        //返回之前的activity
        solo.goBack();
        
        //再次添加一个Note2
        solo.clickOnMenuItem("Add note");    
        solo.enterText(0, "Note2");
        solo.sleep(2000);
        solo.goBackToActivity("NotesList");
        
        boolean expected=true;
       //搜索当前页的文本内容,判断是否存在Note1和Note2
        boolean actual=solo.searchText("Note1")&&solo.searchText("Note2");
        assertEquals("Note1或Note2不存在", expected, actual);    
        
    }

    //编辑
    public void testEditNote(){
        //点击列表的第二项
        solo.clickInList(2);
        //控制屏幕是横屏还是竖屏
        solo.setActivityOrientation(Solo.LANDSCAPE);
        solo.clickOnMenuItem("Edit title");
        solo.enterText(0,"test");
        solo.sleep(2000);
        solo.goBack();
        solo.sleep(2000);
        
    }
    
    //删除
    public void testRemoveNote(){    
        //正则判断
        solo.clickOnText("(?i).*?note1.*");
        //solo.clickOnText("Note1test");
        solo.clickOnMenuItem("Delete");
        
        //长按Note2
        solo.clickLongOnText("Note2");
        solo.clickOnText("Delete");
        solo.sleep(5000);
        boolean noteFound = solo.waitForText("Note2", 1, 5000);

        assertFalse("Note 2 is found", noteFound);
    }

}

四.遇到的问题

  问题:执行用例时,一直报错:class not found :com.robotium.solo.Solo

  解决方法:1.右击build path,在order and export中,勾选你导入的robotium-solo-5.3.1.jar包

                2.在菜单栏的project中点击clean,ok