Monkeyrunner 寫腳本的技巧(shell 命令,文件操作)

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

發佈了20 篇原創文章 · 獲贊 29 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章