(原创)学习NotesList(Robotium自带的例子)

我想大家在安装完robotium后,都会试试noteslist 这个例子吧。这个是官网提到的例子

首先打开noteslist 源码

C:\android-sdk_r10-windows\android-sdk-windows\samples\android-7\NotePad 

再打开noteslisttest 源码

可以从上面下载 http://code.google.com/p/robotium/downloads/list/ExampleTestProject_v2.3.zip

要做一点修改。 因为noteslist是在androidV21开发的,而我的测试代码是V23的。我们最好要改成一致的。

修改 noteslisttest 下的AndroidManifest.xml

<uses-sdk android:minSdkVersion="9" /> 

改成<uses-sdk android:minSdkVersion="7" /> 

这两个数字表示什么意思呢?

7--androidV21,9--androidV23,最低版本是3--AndroidV15.

大家按顺序排就知道哪个数字对应的版本了

然后在 noteslisttest 右击选中Properties--Android,选中AndroidV21

这样noteslisttest 里带的android jar 由android2.3 变为android2.1

再说一个配置,我觉得也很重要

还是在AndroidManifest.xml 里

<instrumentation android:targetPackage="com.example.android.notepad" android:name="android.test.InstrumentationTestRunner" />  

红色加粗的字符串表示我们要测试代码的package

OK,这样我们就弄好代码了。 我们只需要执行Run As--Android Junit test

下面我们看看 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)

长时间按住所选的文字

例子看上去还比较简单。学了几个函数方法。 

 请尊重原创,转载请注明来源:http://www.cnblogs.com/morebetter/archive/2011/05/19/2050326.html 

原文地址:https://www.cnblogs.com/morebetter/p/2050326.html