Monkeyrunner的環境已經搭建完成,現在對Monkeyrunner做一個簡介。
Monkeyrunner工具提供了一套API讓用戶/測試人員來調用,調用這些api可以控制一個Android設備或模擬器,而不需要了解對應的源碼。
有了Monkeyrunner,我們可以編寫python腳本來控制apk包的安裝和卸載、啟動app、向app發送各種動作事件、截取圖片并保存。
除此之外,MonkeyRunner是Google提供的一個基于坐標點的Android黑盒自動化測試工具。所以,要使用Monkeyrunner進行自動化測試,首先,要了解Monkeyrunner中獲取坐標點的方式。
方式 |
工具 |
說明 |
控件坐標 |
MonkeyRecorder坐標獲取、其他工具獲取 |
腳本中需要對不同分辨率兼容,坐標要動態轉換 |
控件ID |
HierarchyViewer解析控件ID |
對環境有要求,需要開發機、模擬器,市面商用機需要破解才能使用,一般有風險,速度慢;對不同分辨率通用 |
控件ID |
MonkeyDevice |
只能進行簡單的常用動作 |
本文中,我們主要介紹兩種獲取坐標點的方式。一種是通過MonkeyRecorder獲取坐標;另一種是通過HierarchyViewer工具獲取控件ID。
一、控件坐標獲取
1.Pointer location獲取坐標
先說一個比較簡單的獲取坐標的方式,是通過模擬器中的設置-開發者選項,找到“指針位置”的選項,勾選上。如下圖所示。
勾選后,模擬器的最頂部則顯示坐標,比如點擊模擬器上的任一應用,最頂部顯示X、Y的值即該應用的坐標;同理,如果想要獲取任一應用中的任一位置的坐標,也可用此方法。
2. MonkeyRecorder獲取坐標
下面就MonkeyRecorder獲取坐標的方式,進行演示。MonkeyRecorder是一個比較好用的獲取坐標的工具,它是用來獲取真機或模擬器上坐標的工具,當我們點擊真機或模擬器上的空間時,就能顯示真機或模擬器上的點擊點的坐標。
(1)MonkeyRecorder的啟動
首先安卓手機連接上電腦,并保證以下兩個條件成立:
a.終端USB調成開發者模式
b.電腦安裝手機驅動
手機連接成功后,打開cmd窗口,輸入adb devices查看已連接真機或模擬器設備的名稱,我們這里仍以模擬器為代表。
之后,在cmd窗口,輸入monkeyrunner后,啟動Monkeyrunner。做以下操作:導入MonkeyRecorder包、連接模擬器設備、以MonkeyRecorder方式啟動模擬器,并依次輸入
如下命令:
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice from com.android.monkeyrunner.recorder import MonkeyRecorder as recorder device=MonkeyRunner.waitForConnection() recorder.start(device)
到此,MonkeyRecorder正式啟動。截圖如下。
(2)MonkeyRecorder的使用
我們這里只是使用MonkeyRecorder來記錄坐標,獲取坐標的方式很簡單。比如qq的登錄界面,點擊“登錄”按鈕,右側就會顯示該按鈕的坐標;同樣,點擊賬號輸入框或密碼輸入框,右側同樣會顯示坐標。這個坐標就是我們需要獲得的坐標。
同時,MonkeyRecorder中的界面是同模擬器頁面保持一致的,在MonkeyRecorder中觸發任一操作,模擬器上會有相應的觸發。如果兩者沒有保持一致,則點擊MonkeyRecorder右上角的Refresh Display即可刷新頁面。
3.控件坐標之Monkeyrunner腳本演示
我們將下面一段Monkeyrunner腳本寫到一個test.py文件中,然后運行test.py文件,查看模擬器或真機上是不是做相應的操作。
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice device=MonkeyRunner.waitForConnection() #啟動activity(這里啟動qq) device.startActivity(component="com.tencent.mobileqq/.activity.SplashActivity") #登錄界面,點擊賬號輸入框 device.touch(60,300,'DOWN_AND_UP') #輸入qq賬號 device.type('3469191693')
二、控件ID獲取
通過控件ID實現自動化腳本的運行,就性能而言,會比控件坐標的實現差一些;但是對于不同分辨率的設備都通用,不需要動態變換坐標。控件ID的獲取主要是通過HierarchyViewer。下面就HierarchyViewer從打開方式和使用兩方面進行講解。
1.HierarchyViewer的打開方式
HierarchyViewer的打開方式有兩種:一種是eclipse中打開HierarchyView視圖,另外一種是命令行中執行sdk/tools/hierarchyviewer.bat。
HierarchyViewer默認只能在非加密設備使用,例如工程機,工程平板或者模擬器。如果要在手機上使用HierarchyViewer,你需要在你的應用中添加一個開源庫View Server。鏈接地址:https://github.com/romainguy/ViewServer。該篇文章中有講解如何啟動真機View Server,大家如果有興趣,可參考:https://dup2.org/node/1538。
方式一:連接您的真機設備,或打開模擬器,在eclipse中, 依次選擇Window-Open Perspective-Other,在Other中,選擇HierarchyView視圖,即可打開。
方式二:連接您的真機設備或打開模擬器,運行cmd窗口,進入到sdk/tools目錄下,輸入命令hierarchyviewer.bat,運行hierarchyviewer。
或者直接在sdk/tools目錄下,找到hierarchyviewer.bat,雙擊運行。
下面講解利用HierarchyViewer獲取控件ID的方法。
2.HierarchyViewer獲取控件ID
HierarchyViewer啟動后,首先會看到的第一個窗口顯示了設備和模擬器的列表。點擊左邊的箭頭,就會展開當前設備或模擬器的Activity對象列表。列表中顯示了設備或模擬器上,UI當前可視的所有Activity對象。這些對象按照它們的Android組件名稱列出來。列表中的內容包含應用的Activity對象和系統的Activity對象。
當模擬器activity畫面變更后,點擊refresh可以加載新的頁面布局信息。
從列表中選擇你的activity名稱,雙擊,或點擊菜單欄的Load View Hierarchy按鈕,進入View Hierarchy窗口,查看它的view層次結構;或者點擊Inspect Screenshot按鈕,進入Pixel Perfect窗口,從而查看UI的一個放大圖像。我們這里點擊進入View Hierarchy窗口。
可以從下圖中看到模擬器此activity的畫面布局信息,左邊部分是hierarchy通過樹形結構展示的布局形式,右下角是模擬器上當前頁面的UI布局信息。
通過滾動鼠標,可以放大每個樹節點;拖拽鼠標,移動樹形結構布局。雙擊樹節點可以展示單獨的UI部分。從下圖中,可以看到,id/btn_login即為登錄按鈕的ID。依次類推,可以查看其它控件ID。
注:對于列表、或者彈出框則無法直接通過點擊ID操作成功,需要計算ID的坐標。
3.控件ID之Monkeyrunner腳本演示
同樣的,我們將下面一段Monkeyrunner腳本寫到一個test.py文件中,然后運行test.py文件,查看模擬器上是不是做相應的操作。

from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice from com.android.monkeyrunner.easy import EasyMonkeyDevice #提供了根據ID進行訪問 from com.android.monkeyrunner.easy import By #根據ID返回PyObject的方法 device=MonkeyRunner.waitForConnection() #啟動activity(這里啟動qq) device.startActivity(component="com.tencent.mobileqq/.activity.SplashActivity") easy_device=EasyMonkeyDevice(device) #必須在activity啟動之后 #登錄界面,點擊賬號輸入框 easy_device.touch(By.id('id/0x20e'),MonkeyDevice.DOWN_AND_UP) device.type('3469191693') #輸入qq賬號
到這里,獲取控件坐標和控件ID的兩種方式已經介紹完,由于沒有深入研究,肯定有不少功能點沒有介紹到,有時間的話再做完善。
文章列表