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

你可能感兴趣的:(android,shell,python,脚本,email,工具)