monkeyrunner工具提供了一个API,可以控制Android设备和模拟器。通过monkeyrunner,可以写python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图传送回来。

使用monkeyrunner命令运行脚本时,脚本最好也建在tools目录下。

MonkeyDevice目前操作是根据坐标,EasyMonkeyDevice可以通过控件ID来操作,其实就是在MonkeyDevice和HierarchyViewer的基础上加了一层Wrapper,其实最终它们都会转换成坐标点或ViewNode进行操作。

 但如果这个时候你的python脚本里调用 EasyMonkeyDevice,会报以下错误。
java.lang.RuntimeException: Could not connect to the view server

这是因为EasyMonkeyDevice需要用Hiararchy Viewer获取当前手机实时的UI信息,提供了根据ID找到viewnode,对viewnode的一些操作。它在连接手机时,手机上必须启动一个叫View Server的客户端与其进行socket通信。而在商业手机上,是无法开启view server的

也就是说,EasyMonkeyDevice这个模块,只能运行在虚拟机或者开发机中,当然,商业机也是可以跑的,但是需要root之后再刷机,这个就很坑了。。。

http://stackoverflow.com/questions/27147772/easymonkeydevice-not-found-error-while-running-monkeyrunner-python-script 这里面有提到,可以使用AndroidViewClient来根据控件ID操作手机,https://github.com/dtmilano/AndroidViewClient/wiki上讲了安装的几种方式,同时还需要导入环境变量。

在尝试这种方式的时候,遇到了两个问题,第一个就是找不到module,解决办法在这里:http://stackoverflow.com/questions/12351918/importerror-no-module-named-dtmilano,导入环境变量,然后更改下导包顺序就好了。第二个问题是,里面的方法报错,这个时候我已经头大了,尝试了官网上的所有安装方法,都报相同的错。无奈下选择放弃。

最后,我直接使用坐标来点击屏幕。还有网上有很多monkey_recorder.py脚本,可以直接使用,能够实时记录你点击手机的坐标。

对于不固定的坐标,我在访问那个页面的时候,直接下载布局文件,然后解析该文件,根据关键词获得坐标。(感觉这个方法蠢得不行了。。。)

#coding: UTF-8from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice,MonkeyImageimport osdevice=MonkeyRunner.waitForConnection()device.startActivity(component="***") #component内容是要启动的类,包括包名和类名,如果对于一个apk不知道其启动类的话,可以先启动该app,然后用adb查看当前运行的最上层的类MonkeyRunner.sleep(5)os.popen("adb shell uiautomator dump & adb pull /sdcard/window_dump.xml F:\\")   #下载当前布局,并回传到本机的F盘根目录,这个时候就可以查看布局坐标了device.touch(909,1620,u'DOWN_AND_UP')MonkeyRunner.sleep(10)result = device.takeSnapshot()MonkeyRunner.sleep(2)result.writeToFile('F:\\a.png','png')print("Image success!!")MonkeyRunner.sleep(20)

这里又出幺蛾子了。。。拍照的时候,报错如下


这个错误不固定,有时候成功,有时候报错,有时候截图是全黑。

而且上面这种方式,sleep也是一个很重要的函数,如果页面还没跳转或是未加载完成,那么就很可能出错。

这里还有一种方法,不过我没尝试过,有兴趣的同学可以看看:http://blog.csdn.net/tzh2009/article/details/8152382

各位大佬如果知道我的错误,或是有其他更好的办法,求指点啊!

   
   
   


更多相关文章

  1. android 预装第三方apk的方法(非system priv-app)
  2. Android(安卓)定时任务过程详解
  3. Android(安卓)Studio如何设置自动import价包
  4. StatusBar (状态栏)的架构(Android(安卓)2.3)
  5. Android中LocationManager的简单使用01
  6. 百度也出手机操作系统
  7. 如何编译Android(安卓)ASE
  8. Android――ContentProvider (一)创建contentProvider
  9. Android(安卓)TextView drawText BaseLine理解,设置内容垂直、水

随机推荐

  1. 超时时间已到.错误及Max Pool Size设置
  2. VS连接MySQL·:Unable to connect to
  3. PL/SQL编程基础(1)
  4. sql/sql develop 在 安装64位oracle 机器
  5. 【一步一个脚印】Tomcat+MySQL为自己的AP
  6. 如何将A表查出来的数据放到B表中
  7. 存款日均额计算的SQL语句如何书写
  8. SQLSERVER中的假脱机spool
  9. [超入门]使用docker做mysql主从复制实验
  10. laravel原生MySQL之Group记录