一、手機安裝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視圖進行解析