<uses-sdk android:targetSdkVersion="YOUR_VERSION" /> 

Example of a test case (test case spanning over multiple activities where EditorActivity is the first activity):

  
public class EditorTest extends 
               
ActivityInstrumentationTestCase2<EditorActivity> { 
 
 
private Solo solo; 
 
 
public EditorTest() { 
               
super("com.test.editor", 
                               
EditorActivity.class); 
 
} 
 
 
public void setUp() throws Exception { 
        solo
= new Solo(getInstrumentation(), getActivity()); 
 
} 
   
 
public void testPreferenceIsSaved() throws Exception { 
   
                solo
.sendKey(Solo.MENU); 
                solo
.clickOnText("More"); 
                solo
.clickOnText("Preferences"); 
                solo
.clickOnText("Edit File Extensions"); 
               
Assert.assertTrue(solo.searchText("rtf")); 
                 
                solo
.clickOnText("txt"); 
                solo
.clearEditText(2); 
                solo
.enterText(2, "robotium"); 
                solo
.clickOnButton("Save"); 
                solo
.goBack(); 
                solo
.clickOnText("Edit File Extensions"); 
               
Assert.assertTrue(solo.searchText("application/robotium")); 
                 
 
} 
 
   
@Override 
   
public void tearDown() throws Exception { 
        solo
.finishOpenedActivities(); 
 
} 
}
 
 
 
测试代码讲解: 

下面我们看看 noteslisttest 里的具体代码,看看它是怎么测试的

 

// 告知系统我要测试的app是什么

 

public NotePadTest() {

super("com.example.android.notepad", NotesList.class);

}

//打开noteslist 

public void setUp() throws Exception {

solo = new Solo(getInstrumentation(), getActivity());

}

 

public void testAddNote() throws Exception {

solo.clickOnMenuItem("Add note");

//Assert that NoteEditor activity is opened

solo.assertCurrentActivity("Expected NoteEditor activity", "NoteEditor"); 

//In text field 0, add Note 1

solo.enterText(0, "Note 1");

solo.goBack(); 

//Clicks on menu item

solo.clickOnMenuItem("Add note");

//In text field 0, add Note 2

solo.enterText(0, "Note 2");

//Go back to first activity named "NotesList"

solo.goBackToActivity("NotesList"); 

boolean expected = true;

boolean actual = solo.searchText("Note 1") && solo.searchText("Note 2");

//Assert that Note 1 & Note 2 are found

assertEquals("Note 1 and/or Note 2 are not found", expected, actual); 

这是我们第一个case,主要目的是测试添加文本的功能 

clickOnMenuItem(String)

功能是点击Menu按钮,选择文本描述为String的菜单,如我们的例子是"Add note"

assertCurrentActivity(String message,String name)

这个是判断当前的activity是否和我预期的一致

message是描述性的文字

name是指activity的名字

关于如何知道activity 名字,我找了半天的文档,目前的方法是得看源码中的 AndroidManifest.xml--Application label--Application Nodes,在那里我们可以看到所有的activity的name

 

enterText(int index,string text)

index用来标识写到哪个EditText中。如果当前只打开一个EditText,那index=0

text:就是我们要写入的内容

 

goBack() 

相当于手机上的 返回键(back key)

 

goBackToActivity(String name)

返回到指定的activity

 

searchText(String text)

在当前的activity中搜索是否含有text的内容 

 

public void testEditNote() throws Exception {

// Click on the second list line

solo.clickInList(2); 

// Change orientation of activity

solo.setActivityOrientation(Solo.LANDSCAPE);

// Change title

solo.clickOnMenuItem("Edit title");

//In first text field (0), add test

solo.enterText(0, " test");  

solo.goBackToActivity("NotesList");

boolean expected = true;

// (Regexp) case insensitive

boolean actual = solo.searchText("(?i).*?note 1 test"); 

//Assert that Note 1 test is found

assertEquals("Note 1 test is found", expected, actual); 

第二个case,主要是测试编辑功能的

clickInList(int index)

 点击list表的第index行,进入该文本界面

 solo.setActivityOrientation(Solo.LANDSCAPE);

 setActivityOrientation,设置手机屏幕显示方式

 LANDSCAPE:横向显示

 Portrait:竖向显示 

 

 

 public void testRemoveNote() throws Exception {

//(Regexp) case insensitive/text that contains "test"

solo.clickOnText("(?i).*?test.*");

//Delete Note 1 test

solo.clickOnMenuItem("Delete");

//Note 1 test & Note 2 should not be found

boolean expected = false;   

boolean actual = solo.searchText("Note 1 test");

//Assert that Note 1 test is not found

assertEquals("Note 1 Test is not found", expected, actual);  

solo.clickLongOnText("Note 2");

//Clicks on Delete in the context menu

solo.clickOnText("(?i).*?Delete.*");  

actual = solo.searchText("Note 2");

//Assert that Note 2 is not found

assertEquals("Note 2 is not found", expected, actual);  

}

 第三个case,是用来测试删除功能的

 clickOnText(String text)

点击包含该文字的地方

其中text可以用正则表达式表示

(?i)----忽略大小写。默认情况是大小写敏感的。

正则表达式与java保持一致

 

clickLongOnText(String text)

长时间按住所选的文字

 

posted on 2012-01-08 21:15  随我畅翔  阅读(562)  评论(0编辑  收藏  举报