您的位置:首页 > 移动开发 > Android开发

【Android自动化测试之Robotium】02. Robotium之用例分析

2014-03-13 09:06 393 查看


这篇文章写的很好, 有时间玩玩。

如果大家配置好了Robotium的测试环境,那么开始吧(这里只介绍有源码的情况,没有源码也是可以做的)

被测应用下载:http://download.csdn.net/detail/wirelessqa/4487252

测试代码 (只贴出MainActivity和GridView,用例很简单就不多作注释了)

大家可以对照着Athrun的用例来看看两个框架的区别

[java]
view plaincopy

package org.onceler.robotium.test;  
  
import java.util.ArrayList;  
  
import org.athrun.android.app.MainActivity;  
import org.athrun.android.app.R;  
import org.athrun.android.app.ScrollActivity;  
  
import android.test.ActivityInstrumentationTestCase2;  
import android.test.suitebuilder.annotation.Smoke;  
import android.util.Log;  
import android.view.KeyEvent;  
import android.view.View;  
import android.widget.TextView;  
  
import com.jayway.android.robotium.solo.Solo;  
  
public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity>{  
    private Solo solo;  
    private TextView tv;  
    private static final String TAG = "robotium_test";  
  
    public MainActivityTest() {  
        super("org.athrun.android.app", MainActivity.class);  
  
    }  
  
    public void setUp() throws Exception {  
        solo = new Solo(getInstrumentation(), getActivity());  
    }  
      
    @Override  
    public void tearDown() throws Exception {  
        //Robotium will finish all the activities that have been opened  
        solo.finishOpenedActivities();  
    }  
      
    @Smoke  
    public void testWaitForActivity(){  
        solo.assertCurrentActivity("assert activity err", MainActivity.class);  
        solo.assertCurrentActivity("assert activity err", "MainActivity");  
        solo.assertCurrentActivity("assert activity err",  MainActivity.class, true);  
        solo.assertCurrentActivity("assert activity err", "MainActivity", true);  
          
        solo.clickOnButton("ScrollView");  
        solo.assertCurrentActivity("assert activity err", ScrollActivity.class);  
          
        solo.goBack();  
        solo.clickOnButton(4);  
        solo.assertCurrentActivity("assert activity err", "ScrollActivity");  
        solo.goBackToActivity("MainActivity");  
        solo.assertCurrentActivity("assert activity err", "MainActivity", true);  
    }  
      
    @Smoke  
    public void testFindElementInTree(){      
        ArrayList<View> list = solo.getViews(solo.getView(R.id.include_checkbox));  
        tv = (TextView)list.get(2);  
        assertEquals("default text",tv.getText());  
          
        solo.clickOnCheckBox(0);  
        tv = (TextView)list.get(2);  
        assertEquals("CheckBox is checked!",tv.getText());  
    }  
      
    public void testFindViewByIdDirect() {  
        //通过ID得到view  
        tv = (TextView)solo.getView(R.id.textview);  
        assertEquals("default text",tv.getText());  
          
        solo.clickOnCheckBox(0);  
          
        tv = (TextView)solo.getView(R.id.textview);       
        assertEquals("CheckBox is checked!",tv.getText());  
    }  
      
    public void testLongClick(){  
        //ImageView iv = (ImageView)solo.getView(R.id.my_imageview);  
        solo.clickLongOnView(solo.getView(R.id.my_imageview));  
        //这个TOAST提示捕获不到,不知道哪里有问题,知道的朋友可以跟我说一下  
    //  assertEquals(true,solo.waitForText("LongClick"));  
    }  
      
    public void testPressMenu(){  
        solo.clickOnMenuItem("Toast");  
        //这个TOAST跟上面的一样,这个确是成功的。OH MY GOD,这是为何  
        assertEquals(true,solo.waitForText("Hello World"));  
    }  
      
    public void testPressHome(){  
        solo.sendKey(KeyEvent.KEYCODE_HOME);  
        solo.sleep(2000);  
    }  
      
    public void testPressBack(){  
        solo.clickOnButton("ScrollView");  
        solo.clickOnButton("Bottom Button");  
        solo.sendKey(KeyEvent.KEYCODE_BACK);  
        solo.assertCurrentActivity("assert activity err", "MainActivity");  
    }  
      
    public void testFindViewByText(){  
        solo.clickOnButton("ListView");  
        solo.clickLongOnText("Item35");  
        solo.clickOnText("Item One");  
        assertTrue(solo.waitForText("1 pressed!"));  
    }  
      
    public void testScrollListInDialog(){  
        solo.clickOnMenuItem("Dialog With List");  
        solo.clickOnText("Item9");  
        assertTrue(solo.waitForText("Item 9 clicked!"));  
        solo.clickOnButton("OK");  
        assertTrue(solo.waitForText("Botton OK in dialog with list is pressed!"));  
    }  
      
    public void testSetScreen() {  
        solo.setActivityOrientation( Solo.LANDSCAPE);  
        solo.setActivityOrientation(Solo.PORTRAIT);  
        solo.sleep(2000);         
    }  
      
    public void testGetStringById(){  
        solo.clickOnButton("ScrollView");  
        assertTrue(solo.getString(R.string.scroll_text).toString().contains("道可道"));  
    }  
      
      
    public void testRequestFocus(){       
        //好像没有直接获得焦点的方法,所以。。慢慢移动吧     
    }  
      
    public void testSlide(){  
        //gallery的操作方法没有  
        //左右滑动用 solo.scrollToSide(Solo.LEFT);         
    }  
  
    public void testGetChildCount(){  
        Log.i(TAG, String.valueOf(solo.getViews().size())); //所有的VIEW数量  
        Log.i(TAG, String.valueOf(solo.getViews(solo.getView(R.id.mainroot)).size()));//LinearLayout下的VIEW数量  
        Log.i(TAG, String.valueOf(solo.getViews(solo.getView(R.id.my_gallery)).size()));//GALLERY下的VIEW数量  
    }  
  
}  

GridView

[java]
view plaincopy

package org.onceler.robotium.test;  
  
import org.athrun.android.app.GridViewActivity;  
import org.athrun.android.app.ListViewActivity;  
  
import android.test.ActivityInstrumentationTestCase2;  
  
import com.jayway.android.robotium.solo.Solo;  
  
public class GridViewActivityTest extends ActivityInstrumentationTestCase2<GridViewActivity>{  
    private Solo solo;  
    private static final String TAG = "robotium_test";  
    public GridViewActivityTest() {  
        super("org.athrun.android.app", GridViewActivity.class);  
  
    }  
  
    public void setUp() throws Exception {  
        solo = new Solo(getInstrumentation(), getActivity());  
    }  
      
    @Override  
    public void tearDown() throws Exception {  
        //Robotium will finish all the activities that have been opened  
        solo.finishOpenedActivities();  
    }  
      
    public void testGetChildByIndex(){  
//      solo.clickOnText("Item.0");  
        solo.clickOnImage(0);  
        assertTrue(solo.waitForText("Item 0 is clicked!"));  
        solo.assertCurrentActivity("current activity is not ListViewActivity", ListViewActivity.class);  
    }  
      
    public void testGetChildByIndexMixed(){  
        solo.clickOnText("Item.19");  
        assertTrue(solo.waitForText("Item 19 is clicked!"));  
        solo.sleep(1000);  
        //接下来没有办法直接获得哪一行的TEXT,ATHRUN就可以  
        //所以只能通过INDEX来查找  
        solo.getText(40); //这个有问题,被测应用的问题  
        //移动到第20行可以像下面这样OH MY GOD,好慢  
//      for(int i = 0;i<21;i++){  
//          solo.sendKey(Solo.DOWN);  
//      }  
              
    }  
  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: