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

上一篇 / 下一篇  2015-01-25 19:38:16 / 个人分类: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)

  长时间按住所选的文字

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


TAG:

 

评分:0

我来说两句

Open Toolbar