天地會珠海分舵注:本來這1系列是準備出1本書的,詳情請見早前博文“尋求合作火伴編寫《深入理解 MonkeyRunner》書籍“。但由于諸多緣由,沒有如愿。所以這里把草稿分享出來,所以毛病在所難免。有需要的就參考下吧,轉發的話還請保存每篇文章結尾的出處等信息。
上1節我們扼要描寫了測試對象NotePad的主要功能模塊,那末這1節開始我們就會對每一個模塊進行相應的論述,這樣讀者就算沒有真正去安裝和玩過這個利用也不會影響大家對本書的瀏覽理解了。
我們首先看的就是NotesList這個Activity窗口。在你的安卓手機上找到NotePad這個利用的圖標以后,就能夠點擊該圖標進入到該Activity了:
? 圖2⑵⑴ NotesList Activity窗口
該Activity窗口的的名字我們可以用sdk自帶的工具hierarchyviewer來取得,該工具是寄存在你的SDK的tools目錄下面的,比如在我的機器上是”/Users/apple/Develop/sdk/tools/hierarchyviewer”。用戶可以指定該路徑來打開該工具,固然,如果你的環境變量已設置好的話,也能夠直接輸入”hierarchyviewer”命令來打開。不管你的工作環境是Windows還是Linux還是MAC,其原理是1致的。
這里我們在安卓已打開NotesList這個Activity的時候,在主機端運行hierarchyviewer工具,該工具列出的信息以下:
?圖2⑵⑵ hierarchyviewer工具列出的不完全Activity名稱
從上圖可以看到,在該工具的主界面列出了所有打開的Activity窗口的名字,其中粗體的部份代表是頂層的Activity窗口,也就是說當前在目標安卓機器上看到的窗口。該窗口名字也叫做組件(component),由兩個部份組成:斜杠分隔符前面1部份”com.example.android.notepad”是NotePad利用的包名,在目標機器上全局唯1;分隔符后面1部份是Activity的名字,在這里沒有顯示完全,完全的NotesList的Activity名字應當是”com.example.android.notepad.NotesList”。我們可以把鼠標放到該控件名字里面來讓hierarchyviewer把Activity顯示完全以下:
圖2⑵⑶ hierarchyviewer工具列出的完全Activity名稱
在取得NotesList這個Activity的名字主要的目的是在編寫MonkeyRunner腳本時可以指定該名字來打開NotePad利用。
NotesList這個窗口由幾個部份組成,查看1個窗口的控件信息可以通過另外1個叫做uiautomator的工具來完成。該工具一樣是在你的sdk目錄下的tools下面可以找到,但需要提1下的是,該工具是在Android 4.1及以后的版本才有的,由于它是隨著UiAutomator這個新的UI自動化框架1起出來的。下面我們先列出各個控件的扼要描寫:
下面我們先來看下在uiautomator中捕獲到的標題控件信息的具體內容:
圖2⑵⑷ NotesList標題控件
從上圖可以看到NostList標題是1個TextView,uiautomatorviewer中它的文本內容是”Notes”;resource-id是”android:id/title”,MonkeyRunner可以通過該id定位到該標題控件;bounds屬性表示該控件的邊界范圍,由左上角的絕對坐標和右下角的絕對坐標進行定義(但系統選項菜單會不1樣,我們第4小節會進行描寫)。我們可以通過該邊界決定MonkeyRunner摹擬點擊該控件時的有效位置,1般做法是取各個坐標邊界的中間值,比如上面的左上角x坐標6加上右下角x坐標474再除以2就是我們點擊的x坐標240;左上角6坐標39加上右下角y坐標74再除以2就是我們點擊的y坐標56,所以終究的點擊坐標就應當是[240,56]。
固然該控件還有很多其他信息,但由于MonkeyRunner都用不上,所以就不逐一羅列了。
下面我們繼續去看1下NotesList這個窗口中的另外1個控件-日記內容列表ListView的內容:
圖2⑵⑸ NotesList日記列表ListView
由于當前還沒有增加任何日記,所有該控件顯示的是1個空列表。我們增加兩個日記后,日記列表內容將以下所示:
圖2⑵⑹ NotesList日記
上圖左側顯示新增加日記的標題,右側是uiautomatorviewer所顯示的該日記的屬性,可以看到每一個日記是1個TextView類型的控件,而這些日記的父控件就是日記類容列表ListView控件。
作者:天地會珠海分舵
微信公眾號:TechGoGoGo
微博:http://weibo.com/techgogogo
CSDN:http://blog.csdn.net/zhubaitian