Android Monkeyrunner的录制和回放功能

最近在研究了下monkeyrunner的录制和回放功能 ,开始的时间,不得其解 ,最后终于成功了 ,贴出来,做个标记 ! 前提是已经配置好了python和Android的SDK 

录制和回放需要两个脚本文件recorder.py和playback.py(名字可以见名知意)

record.py 文件

  1. #!/usr/bin/env monkeyrunner  
  2. # Copyright 2010, The Android Open Source Project#  
  3. # Licensed under the Apache License, Version 2.0 (the "License");  
  4. # you may not use this file except in compliance with the License.  
  5. # You may obtain a copy of the License at#  
  6. # http://www.apache.org/licenses/LICENSE-2.0#  
  7. # Unless required by applicable law or agreed to in writing, software  
  8. # distributed under the License is distributed on an "AS IS" BASIS,  
  9. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
  10. # See the License for the specific language governing permissions and  
  11. # limitations under the License.   
  12. from com.android.monkeyrunner import MonkeyRunner as mr  
  13. from com.android.monkeyrunner.recorder import MonkeyRecorder as recorder   
  14. device = mr.waitForConnection()  
  15. recorder.start(device)

首先要连接手机,在 cmd 命令行运行 monkeyrunner  record.py,会弹出一个MonkeyRecord窗口界面该窗口的功能:

     1、可以自动显示手机当前的界面

     2、自动刷新手机的最新状态

     3、点击手机界面即可对手机进行操作,同时会反应到真机,而且会在右侧插入操作脚本

     4:、wait: 用来插入下一次操作的时间间隔,点击后即可设置时间,单位是秒

            Press a Button:用来确定需要点击的按钮,包括menu、home、search,以及对按钮的press、down、up属性

            Type Something:用来输入内容到输入框

             Fling:用来进行拖动操作,可以向上、下、左、右,以及操作的范围

             Export Actions:用来导出脚本,不需要后缀名,也可以添加后缀名

             Refresh Display:用来刷新手机界面,估计只有在断开手机后,重新连接时才会用到


通过鼠标的点击 ,右边会自动化的生成脚本 ,但是记得中间加上等待时间,否则容易出错


备注 : 这里会显得有点卡


贴图展示下 :


playback.py文件,主要是回放功能:

  1. #!/usr/bin/env monkeyrunner  
  2. # Copyright 2010, The Android Open Source Project  
  3. #  
  4. # Licensed under the Apache License, Version 2.0 (the "License");  
  5. # you may not use this file except in compliance with the License.  
  6. # You may obtain a copy of the License at  
  7. #  
  8. # http://www.apache.org/licenses/LICENSE-2.0  
  9. #  
  10. # Unless required by applicable law or agreed to in writing, software  
  11. # distributed under the License is distributed on an "AS IS" BASIS,  
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
  13. # See the License for the specific language governing permissions and  
  14. # limitations under the License.   
  15. import sys  
  16. from com.android.monkeyrunner import MonkeyRunner   
  17. # The format of the file we are parsing is very carfeully constructed.  
  18. # Each line corresponds to a single command. The line is split into 2  
  19. # parts with a | character. Text to the left of the pipe denotes  
  20. # which command to run. The text to the right of the pipe is a python  
  21. # dictionary (it can be evaled into existence) that specifies the  
  22. # arguments for the command. In most cases, this directly maps to the  
  23. # keyword argument dictionary that could be passed to the underlying  
  24. # command.   
  25. # Lookup table to map command strings to functions that implement that  
  26. # command.  
  27. CMD_MAP = {  
  28.     'TOUCH'lambda dev, arg: dev.touch(**arg),  
  29.     'DRAG'lambda dev, arg: dev.drag(**arg),  
  30.     'PRESS'lambda dev, arg: dev.press(**arg),  
  31.     'TYPE'lambda dev, arg: dev.type(**arg),  
  32.     'WAIT'lambda dev, arg: MonkeyRunner.sleep(**arg)  
  33.     }  
  34. # Process a single file for the specified device.  
  35. def process_file(fp, device):  
  36.     for line in fp:  
  37.         (cmd, rest) = line.split('|')  
  38.         try:  
  39.             # Parse the pydict  
  40.             rest = eval(rest)  
  41.         except:  
  42.             print 'unable to parse options'  
  43.             continue   
  44.         if cmd not in CMD_MAP:  
  45.             print 'unknown command: ' + cmd  
  46.             continue   
  47.         CMD_MAP[cmd](device, rest)  
  48. def main():  
  49.     file = sys.argv[1]  
  50.     fp = open(file, 'r')   
  51.     device = MonkeyRunner.waitForConnection()     
  52.     process_file(fp, device)  
  53.     fp.close();     
  54. if __name__ == '__main__':  
  55.     main()

在cmd中执行  如下


在执行前 ,记得关闭原来的录制窗口哦 !。。。

另外记得在录制的时间 ,加上时间间隔 ,加上时间间隔 ,加上时间间隔 ,重要的事情 说三遍 ,否则 容易出错  。




猜你喜欢

转载自blog.csdn.net/hejunw/article/details/78463427