robotium常用方法

①  點擊:

clickOnButton(int) //Clicks on a Button with a given index.

clickOnButton(String) //Clicks on a Button with a given text.

clickOnCheckBox(int) //Clicks on a CheckBox with a given index.

clickOnView(View) //Clicks on a given View.

clickOnText(String) //Clicks on a View displaying a given text.

clickLongOnText(String) //Long clicks on a given View.

clickOnRadioButton(int) //Clicks on a RadioButton with a given index.

clickOnScreen(float, float) //Clicks on a given coordinate on the screen.

 

②  取得:

getCurrentActivity() //Returns the current Activity.

getText(String) //Returns a TextView which shows a given text.

getView(int) //Returns a View with a given id.

getEditText(String) //Returns an EditText which shows a given text.  

getImage(int) //Returns an ImageView with a given index.

 

③  拖拽:

drag(float, float, float, float, int) //Simulate touching a given location and dragging it to a new location.

 

④  搜索:

searchText(String) //Searches for a text string and returns true if at least one item is found with the expected text.

searchEditText(String) //Searches for a text string in the EditText objects located in the current Activity.

searchButton(String, boolean) //Searches for a Button with the given text string and returns true if at least one Button is found.

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的內容

clickInList(int index);點擊list表的第index行,進入該文本界面

solo.setActivityOrientation(Solo.LANDSCAPE);setActivityOrientation,設置手機屏幕顯示方式

LANDSCAPE:橫向顯示

Portrait:豎向顯示

clickOnText(String text);點擊包含該文字的地方

其中text可以用正則表達式表示

(i)----忽略大小寫。默認情況是大小寫敏感的。

正則表達式與java保持一致

clickLongOnText(String text);長時間按住所選的文字

這裏需要注意:被測apk和測試apk必須使用相同的簽名

 

Robotium問題總結

1、Robotium的測試類ActivityInstrumentationTestCase2繼承了TestCase類,即robotiom的測試類是junit3的實例,並沒有junit4的特徵,比如通過annotate的方式來識別子類的新特徵,沒不能實現@beforeclass,@afterclass等特徵。只能通過寫setup和teardown,以及test開頭的測試用例的方式進行測試case書寫。

 

2、有些button沒有string,沒有text,只能通過index來click, 這樣很不直觀,而且button的index並不是固定的,有可能隨着 控件重新加載,順序也有可能發生變化,無法保證測試結果。查看了robotium源碼,發現大多數click方法最終都是通過傳入參數轉成view,再調 用clickOnView,於是參照着寫了一個通過button的ID來click的方法。Button的ID需要查看測試對象的源碼中獲取。比如導航中就有菜單欄大多數據button就是這種類型的。

 

3、有的activity點擊後不能獲取焦點,可以通過另外的方式獲取activity的內容,比如Activity act = solo.getCurrentActivity();獲取當前的activity,然後通過act.findViewById的方式獲取控件。

 

4、多個屏幕的情況,可以通過滾屏的方式滑動,solo.scrollToSide(Solo.LEFT),如果多屏屬於一個activity,則不需要滑動也能運行case獲取數據。

 

5、有時text view或者button的click方法會失效,咋辦?答案是在被測程序的AndroidManifest.xml文件里加上這麼一句:<supports-screens android:anyDensity="true"/>就行了。

 

6、如果要想在robotium的測試程序裏讀寫SD card腫麼辦?答案是在被測程序的AndroidManifest.xml文件里加上<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>。注意是在被測程序里加上,在測試程序本身的manifest文件里加會很坑爹的。

 

7、listview動態添加item如何判斷添加成功。可從添加前及添加後Item個 數判斷,先確定添加item的屬性,再通過相應的方法獲取item。比如添加一個item可能需要三個textview,那麼通過 getCurrentTextViews(View)前後獲取到的個數差就相差三個。比如添加黑名單到黑名單列表。

(1)有的listView只有web,或者主要是文本,可以通過getItemAtPosition(i).toString()的方法獲取第幾行的內容。

solo.clickOnText(chooseProvPage.getListView().getItemAtPosition(i).toString());

(2)有的listView包含多個testView或者button,可以通過findViewById的方法得到某一行的一項的內容。

 

8、無法捕獲Toast,這個有點不明白。大概實驗了一下,可以使用waitForText這個函數來捕獲文字,這個方法返回值是布爾型的,所以返回true就是找到了。

 

9、結果判斷

(1)waitForText

該方法適用於點擊操作後需要一點時間才返回結果的結果判斷。比如聯網操作,可以設置適當的延時,等待返回結果,判斷結果更加正確。

(2)assertActivity

該方法適用於activity時,可以判斷點擊操作切換Activity是否正確,可以與waitfortext配合使用。

(3)searchText+assert

當有editText時,輸入內容後,可通過searchText查找輸入內容是否是預期結果,再將返回結果判斷。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章