① 點擊:java
clickOnButton(int) //Clicks on a Button with a given index.android
clickOnButton(String) //Clicks on a Button with a given text.web
clickOnCheckBox(int) //Clicks on a CheckBox with a given index.正則表達式
clickOnView(View) //Clicks on a given View.ide
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.xml
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問題總結
一、Robotium的測試類ActivityInstrumentationTestCase2繼承了TestCase類,即robotiom的測試類是junit3的實例,並無junit4的特徵,好比經過annotate的方式來識別子類的新特徵,沒不能實現@beforeclass,@afterclass等特徵。只能經過寫setup和teardown,以及test開頭的測試用例的方式進行測試case書寫。
二、有些button沒有string,沒有text,只能經過index來click, 這樣很不直觀,並且button的index並非固定的,有可能隨着 控件從新加載,順序也有可能發生變化,沒法保證測試結果。查看了robotium源碼,發現大多數click方法最終都是經過傳入參數轉成view,再調 用clickOnView,因而參照着寫了一個經過button的ID來click的方法。Button的ID須要查看測試對象的源碼中獲取。好比導航中就有菜單欄大多數據button就是這種類型的。
三、有的activity點擊後不能獲取焦點,能夠經過另外的方式獲取activity的內容,好比Activity act = solo.getCurrentActivity();獲取當前的activity,而後經過act.findViewById的方式獲取控件。
四、多個屏幕的狀況,能夠經過滾屏的方式滑動,solo.scrollToSide(Solo.LEFT),若是多屏屬於一個activity,則不須要滑動也能運行case獲取數據。
五、有時text view或者button的click方法會失效,咋辦?答案是在被測程序的AndroidManifest.xml文件里加上這麼一句:<supports-screens android:anyDensity="true"/>就好了。
六、若是要想在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文件里加會很坑爹的。
七、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的方法獲得某一行的一項的內容。
八、沒法捕獲Toast,這個有點不明白。大概實驗了一下,能夠使用waitForText這個函數來捕獲文字,這個方法返回值是布爾型的,因此返回true就是找到了。
九、結果判斷
(1)waitForText
該方法適用於點擊操做後須要一點時間才返回結果的結果判斷。好比聯網操做,能夠設置適當的延時,等待返回結果,判斷結果更加正確。
(2)assertActivity
該方法適用於activity時,能夠判斷點擊操做切換Activity是否正確,能夠與waitfortext配合使用。
(3)searchText+assert
當有editText時,輸入內容後,可經過searchText查找輸入內容是不是預期結果,再將返回結果判斷。