文章出處

    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賬號
test.py

    到這里,獲取控件坐標和控件ID的兩種方式已經介紹完,由于沒有深入研究,肯定有不少功能點沒有介紹到,有時間的話再做完善。


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()