Android 4.0已經發布了,令我失望的一點是monkeyrunner工具本身沒有大的提高,SDK看上去沒有什麼變化,但是之前曾將看到趨勢,源碼已經引入Ichampview和ease等新的模塊,可惜源碼還沒有發佈,不知道具體情況,況且現在的monkeyrunner也無法執行。感覺目前sdk列出的功能太少,在寫腳本的時候,限制太多,好在monkeyrunner的腳本是python形式的,豐富的庫文件可以彌補這一缺陷
1. adb命令的執行:os.system()
例如 adb root, adb push, adb pull, 可以用 os.system()來實現,例如os.system("adb push e:\\tmp\\email_eception.log /sdcard/")
2.目錄操作: os.chdir(),os.getcwd()
os.chdir('e:\\tmp')
os.getcwd()
3. 創建以時間命名的文件夾
首先獲取時間:time.ctime(), 獲得的時間格式如"Mon Oct 31 15:48:30 2011",因爲window不支持文件夾名包括“:”,並且帶有空格也會帶來兼容性的問題,可以用字符串處理函數str.replace來將空格用“_”替換,將“:”刪除,st2.replace(" ","_").replace(":","")
4. 判斷文件是否存在
os.path.exists(), 返回True 或 False
os.path.exists("D:\\shellwork\\devtool\\setup\\music\\setup.bat")
5. 連接之前要確保是以root身份連接的(adb root)
os.system('adb root')
os.system('adb wait-for-device')
6. startActivity來發送短信,通過 增加extra data ‘sms_body’,避開UI操作。上代碼
def sendsms(dev, number, smscontent = '', ifsend = True):
''' 發送一條短信,號碼必須要指定,短信內容可選
number: 發送短信的目的號碼
smscontent: 短信的內容
ifsend: 是否點擊短信編輯頁面的發送鍵,將短信發送出去'''
if smscontent == '':
dev.startActivity(action = 'android.intent.action.SENDTO', data = 'sms:'+ str(number))
else:
extrasDic = {'sms_body': str(smscontent)}
dev.startActivity(action = 'android.intent.action.SENDTO', \
data = 'sms:'+ str(number), extras = extrasDic)
if ifsend:
time.sleep(3)
dev.touch(443, 816, MonkeyDevice.DOWN_AND_UP)
time.sleep(1)
keypress_home(dev)
7. startActivity 撥打電話
def makecall(dev, targetdev, number, duration = 15, ifspeaker = False, ifhangup = True, timeout = 2):
'''撥打一個電話
number: 要撥打的目標電話的號碼
duration: 電話持續的時長,默認10秒鐘
speaker: 是否在接通電話後打開speaker
hangup: 指定是否需要由發起電話的一端掛斷電話
timeout: 接聽電話一方收到incomingcall的超時時長
'''
assert(number)
dev.startActivity(action = 'android.intent.action.CALL', data = 'tel:'+ str(number))
time.sleep(5)
if ifspeaker == True:
for i in range(4): #嘗試查詢5次電話的狀態,如果在電話中,打開揚聲器
if isincall(dev):
dev.touch(80, 665, MonkeyDevice.DOWN_AND_UP)
break
time.sleep(2)
acceptcall(targetdev, timeout = 15)
time.sleep(duration)
if ifhangup:
if isincall(dev):
dev.startActivity(component = 'com.android.phone/.MiuiInCallScreen')
time.sleep(2)
dev.touch(240, 800, MonkeyDevice.DOWN_AND_UP)
8. monkeyrunner的交互解釋器中使用help函數
在monkeyrunenr的交互解釋器中,也許你發現了,無法用help函數,我們習慣了在python的交互式解釋器中直接輸入help命令來查詢各種函數或者模塊的用法。但是在monkeyrunner中的交互解釋器中就用不了了,會提示 NameError: name 'help' is not defined,這是因爲沒有導入help函數。只需要到如pydoc中的help就可以使用了,如下:
from pydoc import help