第五章 APP元素定位

自動化測試定位是第一步的,如果要測試的元素都定位不到,其他的操作將無從談起。對於頁面自動化測試,Selenium IDE可以很好地幫大家完成測試步驟的錄製,查看元素的屬性,同時可以方便地轉換成各種測試腳本語言。那麼APP有沒有類似的工具呢?有,可是沒有Selenium IDE這麼強大,那就是SDK自帶的UIAutomatorViewer。

5.1 UIAutomatorViewer講解

UIAutomatorViewer是SDK自帶的一個APP元素查看工具,通過這個工具我們可以查看一下Appview上面的元素的屬性,然後再利用Robotiumsolo的各種API來對元素進行定位操作。下面我們介紹一下UIAutomatorViewer如何使用。

(1)將測試機連接到電腦上,並且將被測試的App簽名後安裝的測試機上。

(2)打開我們安裝的SDK文件夾,在\sdk\tools下找到批處理文件uiautomatorviewer.bat,運行這個文件,就會打開如圖5.1.1所示的界面。

圖5.1.1 uiautomatorviewer運行界面

(3)在手機運行要測試的App,如衆籌網,單擊uiautomatorviewer界面上的“DeviceScreenShot”按鈕,就可以提取手機當前界面。如圖5.1.2所示:

圖5.1.2 獲取手機屏幕

(4)當獲取完成後,我們就可以查看手機上App運行的當前View,要查看某個元素,在左側單擊這個元素,右側會顯示這個元素的屬性。如圖5.1.3所示:

圖5.1.3 查看View元素

由於UIAutomatorViewer沒有辦法記錄測試的操作步驟,所以我們只能根據測試用例來自己編寫測試步驟。針對要測試的元素,我們先查找到這個元素的屬性,再利用solo函數來對其進行定位。

5.2 常用的定位方法

App元素定位方式很多,我們可以根據需要來進行選擇,最常用的有以下幾種:

(1)  根據控件文本信息進行定位

A,        直接根據控件顯示文本進行定位的,如solo.clickOnText("text1");assertTrue(solo.searchText("text1"));

B,         根據文本顯示信息加上附加條件進行定位。如:Solo.clickOnText(String text, int match)Solo.clickOnText(String text, int match,boolean scroll)text要匹配的文本,match符合條件的第n個元素,scroll,是否向下。

(2)  ListView子控件定位 

如果要定位的控件是在一個List View裏面的,那麼除了可以使用以上的text方式進行定位之外,我們還可以通過指定控件在該ListView的地幾行進行定位。

ASolo.clickInList(int line):指定行數進行定位。

BSolo.clickInList(int line, int index):同時指定第幾個ListView的第幾行進行定位.其中第一個參數是行數,第二個參數指的是第幾個ListView,按照我的經驗,就是基於1,界面從左到右從上到下的順序這個ListView所處的位置。

(3)  通過控件的排列順序來定位

View中有多個相同的元素,我們就可以利用其排列順序來進行對其定位,如:

 Solo.clickOnCheckBox(int index);

 Solo.clickOnEditText(intindex)

 Solo.clickOnImage(int index)

 Solo.clickOnImageButton(int index)

 Solo.clickOnRadioButton(int index)

 還有我們上一章講的實例中使用到的:

        EditText editname=solo.getEditText(0);

       solo.enterText(editname, "183****905");

       EditText editpsd=solo.getEditText(1);

    solo.enterText(editpsd,"a0****0");

 

(4)通過控件的內部屬性來定位

Robotium只支持通過兩種控件內部屬性來定位控件:ResrouceId:可以是字符串類型(通過UIAutomatorViewer獲得)也可以是整型(通過R.java文件獲得)。ClassName:控件的Class(可以通過UIAutomatorViewer獲得),不過注意不是字符串,而是真實的class。

A,如我們上面定位示例中的衆籌網的登錄用戶名輸入框,其ResrouceId爲:com.subject.zhongchou:id/loginnumber_phones,則定位方法可以如下:

TextViewview;

view=(TextView)solo.getView(“com.subject.zhongchou:id/loginnumber_phones”);

B,Solo.getView(Class<T>viewClass, int index),利用Class定位。如:

view = solo.getView(TextView.class,1);

solo.clickOnView(view);

點擊從0開始的第1個TextView類型的控件

(5)  無需定位的操作

我們常用到的兩個系統控件是不需要定位的,一個是系統的Menu鍵,一個是系統的goBack。

(6)  其他一些兒定位操作

有些兒特殊的操作,比如說拖動操作,滑動操作,可能需要在屏上從一個位置向另一個位置滑動。此時我們需要定位屏幕座標,然後模擬點擊。這時需要打開手機的一些兒特殊功能,或是下載輔助軟件來檢測屏蔽上的座標。

5.3 App元素定位技巧

由於元素的定位方法不止一種,所以當我們找到欲定位的元素時,需要有目的地選擇定位方法,這樣才能達到高效,準確的定位。以我的個人經驗來講,有如下幾個技巧可以參考:

(1)文本定位必須確保文本唯一。

Robotium用文本定位是非常方便的,我們可以用來執行操作,或是判斷測試用例執行的結果。可是在操作之前我們必須確保在要操作文本在View中唯一,不管是什麼樣式的文本,都不能相同,否則就會定位錯誤。

(2)建議多使用屬性,少使用順序操作。

因爲元素的屬性一般都是唯一的,而且不會經常變動,這是自動化測試定位選擇的標準。如果用順序來定位的話,要定位的元素前面同類的元素有變化時就會影響到定位。屬性定位相當於相對路徑,順序定位相當於絕對路徑,其中的優劣一目瞭然。

(3)勇於嘗試不同的方法。

  元素的定位沒有通用的方法,不可能某一種方法適合所有的元素定位。所以要嘗試各種定位方法,這種不行,換下一種,無非也就是反覆運行調試程序嘛,要學習到真本事,就不要怕麻煩嘛!

(4)勤於總結,做好筆記。

 程序員都不愛寫文檔,認爲寫程序嘛,解決問題了程序運行速度快沒有Bug就行了。殊不知好的文檔也是程序的一部分嘛,平時遇到的問題不總結,下次再遇到了又得麻煩着去查找半天,影響效率。就算你的程序寫的再牛,除了你沒有人能看懂,不利於團隊開發,發展空間也是很小的。所以要養成勤於總結,做好相應的文檔。

5.4 本章小結

   本章我們講解了App元素的定位工具UIAutomatorViewer的使用,以及Robotium框架的定位方法,最後還介紹了元素定位的一些兒技巧。通過本章的學習,我們可以更好的編寫我們的測試用例,可是好的自動化測試是要有組織的去迴歸被測對象。下面的章節我們講述如何組織測試用例,如何有針對的迴歸被測對象。

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