mokeyrunner学习笔记1

一:录制和播放脚本

  1. #Usage: monkeyrunner recorder.py    
  2. #recorder.py  http://mirror.yongbok.net/linux/android/repository/platform/sdk/monkeyrunner/scripts/monkey_recorder.py  
  3.   
  4.   
  5. from com.android.monkeyrunner import MonkeyRunner as mr  
  6. from com.android.monkeyrunner.recorder import MonkeyRecorder as recorder  
  7.   
  8. device = mr.waitForConnection()  
  9. recorder.start(device)  
  10. #END recorder.py  
  11. #Press ExportAction to save recorded scrip to a file  
  12. #Example of result:  
  13. #PRESS|{'name':'MENU','type':'downAndUp',}  
  14. #TOUCH|{'x':190,'y':195,'type':'downAndUp',}  
  15. #TYPE|{'message':'',}  
  16. 将以上代码保存为recorder.py后在cmd窗口中执行命令: monkeyrunner recorder.py即可开始录制。  
  17. ============================================================================================  
  18. #Usage: monkeyrunner playback.py "myscript"  
  19. #playback.py   http://mirror.yongbok.net/linux/android/repository/platform/sdk/monkeyrunner/scripts/monkey_playback.py  
  20. import sys  
  21. from com.android.monkeyrunner import MonkeyRunner  
  22.   
  23. # The format of the file we are parsing is very carfeully constructed.  
  24. # Each line corresponds to a single command.  The line is split into 2  
  25. # parts with a | character.  Text to the left of the pipe denotes  
  26. # which command to run.  The text to the right of the pipe is a python  
  27. # dictionary (it can be evaled into existence) that specifies the  
  28. # arguments for the command.  In most cases, this directly maps to the  
  29. # keyword argument dictionary that could be passed to the underlying  
  30. # command.   
  31.   
  32. # Lookup table to map command strings to functions that implement that  
  33. # command.  
  34. CMD_MAP = {  
  35.     'TOUCH'lambda dev, arg: dev.touch(**arg),  
  36.     'DRAG'lambda dev, arg: dev.drag(**arg),  
  37.     'PRESS'lambda dev, arg: dev.press(**arg),  
  38.     'TYPE'lambda dev, arg: dev.type(**arg),  
  39.     'WAIT'lambda dev, arg: MonkeyRunner.sleep(**arg)  
  40.     }  
  41.   
  42. # Process a single file for the specified device.  
  43. def process_file(fp, device):  
  44.     for line in fp:  
  45.         (cmd, rest) = line.split('|')  
  46.         try:  
  47.             # Parse the pydict  
  48.             rest = eval(rest)  
  49.         except:  
  50.             print 'unable to parse options'  
  51.             continue  
  52.   
  53.         if cmd not in CMD_MAP:  
  54.             print 'unknown command: ' + cmd  
  55.             continue  
  56.   
  57.         CMD_MAP[cmd](device, rest)  
  58.   
  59.   
  60. def main():  
  61.     file = sys.argv[1]  
  62.     fp = open(file, 'r')  
  63.   
  64.     device = MonkeyRunner.waitForConnection()  
  65.       
  66.     process_file(fp, device)  
  67.     fp.close();  
  68.       
  69.   
  70. if __name__ == '__main__':  
  71.     main()  

将以上代码保存为playback.py后在cmd窗口中执行命令monkeyrunner playback.py "myscript"  即可播放录制的脚本“myscript”。

二、mokeyrunner基本命令

1. #导入模块;
    from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
2. #连接当前设备,并返回一个MonkeyDevice对象;
    device = MonkeyRunner.waitForConnection()
    if not device:
        print "Please connect a device to start!"
    else:
        print "Start "
   
3. #安装Android包,注意,此方法返回的返回值为boolean,由此可以判断安装过程是否正常 ;
    device.installPackage('myproject/bin/MyApplication.apk')
    device.removePackage ('com.example.android.notepad')
    print ('卸载成功')
    device.installPackage('ApiDemos.apk')
    print ('安装成功')
4. #启动一个Activity;
    device.startActivity
    (component='com.android.htccontacts/com.android.htccontacts.ContactsTabActivity')
5. #截图;
    result = device.takeSnapshot()
    result.writeToFile('C:\\Users\\Martin\\Desktop\\test.png','png')
6. #时延(秒);
    MonkeyRunner.sleep(3)
7. #滑动屏幕;
    for i in range(1,70):


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


     //开始,结束,持续时间,步骤  


       device.drag((250,110),(250,850),0.1,10)
   MonkeyRunner.sleep(1)
8. #触击屏幕;
    device.touch(507,72,"DOWN_AND_UP")
9. #执行adb shell命令;
    device.shell("input text goup01")
按下HOME键     device.press('KEYCODE_HOME','DOWN_AND_UP')
按下BACK键     device.press('KEYCODE_BACK','DOWN_AND_UP')
按下下导航键     device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')
按下上导航键     device.press('KEYCODE_DPAD_UP','DOWN_AND_UP')
按下OK键     
device.press('KEYCODE_DPAD_CENTER','DOWN_AND_UP')
        
相应的按键对应的名称如下:
home键:KEYCODE_HOME
back键:KEYCODE_BACK
send键:KEYCODE_CALL
end键:KEYCODE_ENDCALL
上导航键:KEYCODE_DPAD_UP
下导航键:KEYCODE_DPAD_DOWN
左导航:KEYCODE_DPAD_LEFT
右导航键:KEYCODE_DPAD_RIGHT
ok键:KEYCODE_DPAD_CENTER
上音量键:KEYCODE_VOLUME_UP
下音量键:KEYCODE_VOLUME_DOWN
power键:KEYCODE_POWER
camera键:KEYCODE_CAMERA
menu键:KEYCODE_MENU

三、monkeyrunner之使用ID

monkeyrunner录制的脚本点击事件等使用的是坐标,在不同尺寸的平板上测试该脚本不通用。下面介绍通过调用应用软件的ID进行操作软件,此操作需要用到以下类和工具:

  1、安卓自有目录sdk\tools\hierarchyviewer.bat工具可以用来查看应用程序的ID。

  操作hierarchyviewer.bat工具步骤:

  (1)、启动安卓模拟器或连接实机,打开需要查看ID的软件界面。此处以google搜索界面为例。然后双击打开hierarchyviewer.bat,显示搜索界面的activity,即下图左侧被选中的项,表示搜索界面的完整包名。

  (2)点击Load View Hierarchy按钮,展现该搜索界面的层级图。选中指定的控件,查看ID名称。

  在属性显示区域可以看到各个控件所处的坐标位置,以及可以查看模拟器上任务栏的高度,这些信息可以用于坐标计算中。

  2、通过EasyMonkeyDevice类和By类来调用控件ID。

  一些常用控件的写法如下:

  (1)输入框的ID写法:

  easy_device.type(By.id('id/name_text),'zhangsan')

  (2)复选框/单选/按钮的ID写法:

  easy_device.touch(By.id('id/login_button'),MonkeyDevice.DOWN_AND_UP)

  (3)当两个ID名称相同时,可以使用层级进行定位

  easy_device.touch(By.id('id/parent_button'),MonkeyDevice.DOWN_AND_UP,By.id('id/current_button'),MonkeyDevice.DOWN_AND_UP)

  通过ID进行计算器操作示例calculator.py:

from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice
from com.android.monkeyrunner.easy import EasyMonkeyDevice
from com.android.monkeyrunner.easy import By
from com.android.chimpchat.hierarchyviewer import HierarchyViewer
from com.android.hierarchyviewerlib.device import ViewNode
device = MonkeyRunner.waitForConnection()
package = 'com.android.calculator2'
activity = 'com.android.calculator2.Calculator'
runComponent = package + '/' + activity
device.startActivity(component=runComponent)
MonkeyRunner.sleep(3.0)
easy_device = EasyMonkeyDevice(device)  #init easymonkeydevice object must start activity at first.Because the init method
will getHierarchyViewer();
easy_device.touch(By.id('id/digit7'),MonkeyDevice.DOWN_AND_UP)
easy_device.touch(By.id('id/mul'),MonkeyDevice.DOWN_AND_UP)
easy_device.touch(By.id('id/digit8'),MonkeyDevice.DOWN_AND_UP)
easy_device.touch(By.id('id/equal'),MonkeyDevice.DOWN_AND_UP)
MonkeyRunner.sleep(1.0)
pic = device.takeSnapshot()
pic.writeToFile('D:\\monkeyrunner\\result.png','png')
print 'test finished!'

  3、运行文件模拟计算7*8=56,生成result.png。monkeyrunner   calculator.py

  用ID进行参数差不多都是这个思路。但是对于列表、或者弹出框则无法直接通过点击ID操作成功,需要计算ID的坐标。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值