標籤:安卓測試自動化 安卓
天地會珠海分舵注:本來這一系列是準備出一本書的,詳情請見早前博文“尋求夥伴編寫《深入理解 MonkeyRunner》書籍“。但因為諸多原因,沒有如願。所以這裡把草稿分享出來,所以錯誤在所難免。有需要的就參考下吧,轉寄的話還請保留每篇文章結尾的出處等資訊。
NotePad視窗Activity之NotesList簡介
上一節我們簡要描述了測試對象NotePad的主要功能模組,那麼這一節開始我們就會對每個模組進行相應的闡述,這樣讀者就算沒有真正去安裝和玩過這個應用也不會影響大家對本書的閱讀理解了。
我們首先看的就是NotesList這個Activity視窗。在你的安卓手機上找到NotePad這個應用的表徵圖之後,就可以點擊該表徵圖進入到該Activity了:
? 圖2-2-1 NotesList Activity視窗
該Activity視窗的的名字我們可以用sdk內建的工具hierarchyviewer來獲得,該工具是存放在你的SDK的tools目錄下面的,比如在我的機器上是”/Users/apple/Develop/sdk/tools/hierarchyviewer”。使用者可以指定該路徑來開啟該工具,當然,如果你的環境變數已經設定好的話,也可以直接輸入”hierarchyviewer”命令來開啟。無論你的工作環境是Windows還是Linux還是MAC,其原理是一致的。
這裡我們在安卓已經開啟NotesList這個Activity的時候,在主機端運行hierarchyviewer工具,該工具列出的資訊如下:
?圖2-2-2 hierarchyviewer工具列出的不完整Activity名稱
從可以看到,在該工具的主介面列出了所有開啟的Activity視窗的名字,其中粗體的部分代表是頂層的Activity視窗,也就是說當前在目標安卓機器上看到的視窗。該視窗名字也叫做組件(component),由兩個部分組成:斜杠分隔字元前面一部分”com.example.android.notepad”是NotePad應用的包名,在目標機器上全域唯一;分隔字元後面一部分是Activity的名字,在這裡沒有顯示完整,完整的NotesList的Activity名字應該是”com.example.android.notepad.NotesList”。我們可以把滑鼠放到該控制項名字裡面來讓hierarchyviewer把Activity顯示完整如下:
圖2-2-3 hierarchyviewer工具列出的完整Activity名稱
在獲得NotesList這個Activity的名字主要的目的是在編寫MonkeyRunner指令碼時可以指定該名字來開啟NotePad應用。
NotesList這個視窗由幾個部分組成,查看一個視窗的控制項資訊可以通過另外一個叫做uiautomator的工具來完成。該工具同樣是在你的sdk目錄下的tools下面可以找到,但需要提一下的是,該工具是在Android 4.1及之後的版本才有的,因為它是隨著UiAutomator這個新的UI自動化架構一起出來的。下面我們先列出各個控制項的簡要描述:
- 標題: NotesList介面中所有日記共用同一個標題,該標題是一個文本TextView控制項
- 日記列表: 所有的日記都會在日記列表這個ListView控制項中進行顯示
下面我們先來看下在uiautomator中捕獲到的標題控制項資訊的具體內容:
圖2-2-4 NotesList標題控制項
從可以看到NostList標題是一個TextView,uiautomatorviewer中它的常值內容是”Notes”;resource-id是”android:id/title”,MonkeyRunner可以通過該id定位到該標題控制項;bounds屬性工作表示該控制項的邊界範圍,由左上方的絕對座標和右下角的絕對座標進行定義(但系統選項菜單會不一樣,我們第4小節會進行描述)。我們可以通過該邊界決定MonkeyRunner類比點擊該控制項時的有效位置,一般做法是取各個座標邊界的中間值,比如上面的左上方x座標6加上右下角x座標474再除以2就是我們點擊的x座標240;左上方6座標39加上右下角y座標74再除以2就是我們點擊的y座標56,所以最終的點擊座標就應該是[240,56]。
當然該控制項還有很多其他資訊,但因為MonkeyRunner都用不上,所以就不一一列舉了。
下面我們繼續去看一下NotesList這個視窗中的另外一個控制項-日記內容列表ListView的內容:
圖2-2-5 NotesList日記列表ListView
因為當前還沒有增加任何日記,所有該控制項顯示的是一個空列表。我們增加兩個日記後,日記列表內容將如下所示:
圖2-2-6 NotesList日記
左邊顯示新增加日記的標題,右邊是uiautomatorviewer所顯示的該日記的屬性,可以看到每個日記是一個TextView類型的控制項,而這些日記的父控制項就是日記類容列表ListView控制項。
天地會珠海分舵
公眾號:TechGoGoGo
微博:http://weibo.com/techgogogo
CSDN:http://blog.csdn.net/zhubaitian
第2章2節《MonkeyRunner源碼剖析》瞭解你的測試對象: NotePad視窗Activity之NotesList簡介(原創)