monkeyrunner自動化測試工具--腳本模板及MonkeyRunner常用事件

一、手機安裝app(今日頭條)

二、寫.PY的monkeyrunner腳本

基本樣式:

#在程序中引入monkeyrunner模塊
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice
#連接到正在運行的設備戒模擬器上,返回一個MonkeyDevice對象
device = MonkeyRunner.waitForConnection()
#安裝待測應用, installPackage會返回一個布爾值,來說明安裝的結果
device.installPackage( "./CalcTest.apk")
#設置要啓勱的活動類名,有包名和活動類組成
runComponent = "com.sky.jisuanji/.JisuanjizixieActivity“
#啓動活動組件
device.startActivity(component = runComponent)

一個簡單的功能,打開一個看新聞的頭條app,然後截圖,再按鍵home使其後臺運行。,腳本保存爲E盤目錄下test0.py

#導入我們需要用到的包和類並且起別名
import sys
from com.android.monkeyrunner import MonkeyRunner as mr
from com.android.monkeyrunner import MonkeyDevice as md
from com.android.monkeyrunner import MonkeyImage as mi
from com.android.monkeyrunner.easy import EasyMonkeyDevice  #提供了根據ID進行訪問
from com.android.monkeyrunner.easy import By    #根據ID返回PyObject的方法

#connect device 連接設備
#第一個參數爲等待連接設備時間
#第二個參數爲具體連接的設備
device = mr.waitForConnection()
if not device:
    print >> sys.stderr,"fail"
    sys.exit(1)
<span style="white-space:pre">	</span>
#定義要啓動的Activity
componentName="com.ss.android.article.news/.activity.SplashActivity"

#啓動特定的Activity
device.startActivity(component=componentName)
mr.sleep(3.0)

#takeSnapshot截圖,獲取程序運行界面截圖
result = device.takeSnapshot()
#save to file 保存到文件
result.writeToFile('./shot1.png','png');#保存到sdk的tools根目錄下
mr.sleep(3.0)
device.press('KEYCODE_<span style="color: rgb(51, 51, 51); line-height: 21.6px;">HOME</span>', device.DOWN_AND_UP)

三、PC運行該腳本

手機連接電腦後,PCcmd命令行輸入 monkeyrunner E:\test0.py。執行成功。

ps:獲取app包名和入口startActivity名稱

使用aapt命令。aapt位於sdk的platform-tools中,如果沒有就網上下載aapt .exe 並放入到sdk的platform-tools目錄中

執行aapt dump badging E:\***.apk即可,運行後的結果中以下兩行分別是應用包名package和入口activity名稱




ps:monkeyrunner常用事件

#monkeyrunner導入模塊

from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage

#monkeyrunner連接設備

device = MonkeyRunner.waitForConnection()
if not device:
print "Please connect a device to start!"
else:
print "Start "

#monkeyrunner啓動一個Activity

componentName="com.ss.android.article.news/.activity.SplashActivity"

device.startActivity(component=componentName)

#monkeyrunner按鍵

發送指定鍵的關鍵事件:  device.press(參數1:鍵碼, 參數2:觸摸事件類型)

參數1:常用鍵內容

  按下HOME鍵 device.press('KEYCODE_HOME', MonkeyDevice.DOWN_AND_UP)

  按下BACK鍵 device.press('KEYCODE_BACK', MonkeyDevice.DOWN_AND_UP)

  按下下導航鍵 device.press('KEYCODE_DPAD_DOWN', MonkeyDevice.DOWN_AND_UP)

  按下上導航鍵 device.press('KEYCODE_DPAD_UP', MonkeyDevice.DOWN_AND_UP)

  按下OK鍵 device.press('KEYCODE_DPAD_CENTER', MonkeyDevice.DOWN_AND_UP)

  按下左導航鍵 device.press('KEYCODE_DPAD_LEFT', MonkeyDevice.DOWN_AND_UP)

  按下右導航鍵 device.press('KEYCODE_DPAD_RIGHT', MonkeyDevice.DOWN_AND_UP)

  相應的按鍵對應名稱:

  menu鍵:KEYCODE_MENU

  home鍵:KEYCODE_HOME

  back鍵:KEYCODE_BACK

  search鍵:KEYCODE_SEARCH

  call鍵:KEYCODE_CALL

  end鍵:KEYCODE_ENDCALL

  上音量鍵:KEYCODE_VOLUME_UP

  下音量鍵:KEYCODE_VOLUME_DOWN

  power鍵:KEYCODE_POWER

  camera鍵:KEYCODE_CAMERA

#monkeyrunner卸載包

device.removePackage ('com.example.android.notepad')

print ('卸載成功')

#monkeyrunner安裝包

device.installPackage('ApiDemos.apk')

print ('安裝成功')

#monkeyrunner單擊控件

方式1:device.touch(507,72,"DOWN_AND_UP") 

方式2:easy_device.touch(By.id('id/qingchu'),device.DOWN_AND_UP)

用後者需要導入

from com.android.chimpchat.hierarchyviewer import HierarchyViewer #根據ID找到ViewNode,對viewnode的一些操作等

from com.android.monkeyrunner.easy import EasyMonkeyDevice  #提供了根據ID進行訪問方法touch、drag等

from com.android.monkeyrunner.easy import By    #根據ID返回PyObject的方法

from com.android.hierarchyviewerlib.models import ViewNode as vn #代表一個控件,可獲取控件屬性

#monkeyrunner長按控件

方式1:device.touch(507,72,"DOWN_AND_UP") 

device.touch(507,72,MonkeyDevice.DOWN)

MonkeyRunner.sleep(1) 

device.touch(507,72,MonkeyDevice.UP)

方式2:

easy_device.touch(By.id('id/qingchu'),,MonkeyDevice.DOWN) 

MonkeyRunner.sleep(1)

 easy_device.touch(By.id('id/qingchu'),MonkeyDevice.UP)

用後者需要導入

from com.android.chimpchat.hierarchyviewer import HierarchyViewer #根據ID找到ViewNode,對viewnode的一些操作等

from com.android.monkeyrunner.easy import EasyMonkeyDevice  #提供了根據ID進行訪問方法touch、drag等

from com.android.monkeyrunner.easy import By    #根據ID返回PyObject的方法

from com.android.hierarchyviewerlib.models import ViewNode as vn #代表一個控件,可獲取控件屬性

#monkeyrunner滑動屏幕

for i in range(1,70):

device.drag((250,110),(250,850),0.1,10)

MonkeyRunner.sleep(1)

#monkeyrunner延時

MonkeyRunner.sleep(3)

#monkeyrunner截圖

result = device.takeSnapshot()

 result.writeToFile('C:\\Users\\Martin\\Desktop\\test.png','png')

#monkeyrunner截圖對比

result1.sameAs(result0,1.0)

#monkeyrunner局部圖片(前兩個值是左上角左邊,後兩個值是右下角減左上角的座標。)

pic0= result0.getSubImage((4,41,400,700))

#monkeyrunner重啓設備

device.reboot()

#monkeyrunner單擊電源鍵,熄滅屏幕

device.press('KEYCODE_POWER',MonkeyDevice.DOWN_AND_UP)

#monkeyrunner喚醒屏幕

device.wake()

#monkeyrunner輸入文本

Cotent='1234'

device.type(Cotent)

#monkeyrunner獲取文本

方式1:#通過By來獲取

text1=easy_device.getText(By.id('id/text'))

print text1.encode('utf-8')

前提:

from com.android.monkeyrunner.easy import EasyMonkeyDevice  #提供了根據ID進行訪問方法touch、drag等

from com.android.monkeyrunner.easy import By    #根據ID返回PyObject的方法

easy_device = EasyMonkeyDevice(device)#初始化EasyMonkeyDevice模塊,必須放在startActivity之後,用來通過ID訪問控制


方式2:通過HierarchyViewer

content = hViewer.findViewById('id/text')  

text0 = hViewer.getText(content)

print text0.encode('utf-8')

前提:

from com.android.chimpchat.hierarchyviewer import HierarchyViewer #根據ID找到ViewNode,對viewnode的一些操作等

from com.android.hierarchyviewerlib.models import ViewNode as vn #代表一個控件,可獲取控件屬性

hViewer = device.getHierarchyViewer() # 對當前UI視圖進行解析

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