• [转]学习NotesList(Robotium自带的例子)


    本文转自:http://www.cnblogs.com/morebetter/archive/2011/05/19/2050326.html

    我想大家在安装完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 

  • 相关阅读:
    最容易懂的红黑树
    Chapter 9 (排序)
    【WC2013】糖果公园
    【Luogu1903】数颜色
    【笔记】Sigmoid函数
    【笔记】费马小定理、数论欧拉定理
    【笔记】单层感知机
    2020ICPC.小米 网络选拔赛第一场
    【Luogu3366】模板:最小生成树
    Codeforces Raif Round 1
  • 原文地址:https://www.cnblogs.com/freeliver54/p/2129224.html
Copyright © 2020-2023  润新知