后知后觉,刚知道Android提供了MonkeyRunner这么个东西,能用来干吗呢,官方文档介绍得很清楚。简单说,能够用Python程序经过API,html
还提供了easy package,包括EasyMonkeyDevice和By两个类,用来经过控件ID来访问控件元素。但是量产设备(非开发版非模拟器)没法使用Hierarchy Viewer,也没法使用easy package。官方的说明是,python
To preserve security, Hierarchy Viewer can only connect to devices running a developer version of the Android system.android
仍是有方法突破该限制的,操做起来有点麻烦,只能暂时舍弃By带来的便利。json
因而只能经过控件坐标来操做控件了。app
还好有MonkeyRecorder,能够减轻一些负担。函数
from com.android.monkeyrunner.recorder import MonkeyRecorder as recorder recorder.start(dev)
这玩意能方便地记录点击操做的坐标值。还有个工具monitor,能够比较方便地获取到每个视图里控件的坐标范围。工具
有了monitor,能够创建两个配置文件,一个用来存放全部控件的坐标,一个用来存放针对每一个测试用例从start Activity开始的抵达路径。
配置文件用xml仍是json呢?选择了json,在蒙头写了近百行控件坐标、用Python写好了加载配置文件用解析出的坐标值初始化控件列表函数后,用monkeyrunner运行,掉进了坑里。测试
import json
这一行报错,import error。spa
Google后知道缘由,MonkeyRunner用的是Jython 2.5.3,多是基于Python 2.5,Python 2.7以后才有json模块。code
难倒得改用xml?近百行json配置文件白写了?
再Google,一大半介绍MonkeyRunner使用的文章都简单到,举例只是connect、startActivity、press一下。多发几个组合触摸事件都没有。我相信不少人都深度使用过MonkeyRunner,但是难倒这些深度使用过的人都不写博客,同时写博客的都是把一个App运行起来后只摸了一下、截了一张图的?
还好有stackoverflow,顺着几个相似问题的解答,终于从坑里爬了出来。详细记录爬的步骤。
一个解决方法是给Python 2.5安装simplejson,以Mac OS X举例。
在Android SDK目录下能够看到Jython jar文件,版本是2.5.3。
android-sdks/tools/lib/jython-standalone-2.5.3.jar
下载simplejson,拷贝到Python 2.5目录,解压,安装。
/Library/Python/2.5/site-packages/ tar -xzf simplejson-3.6.5.tar.gz python setup.py install
而后在MonkeyRunner下import仍是报错import error。
import simplejson
查看Jython path,没有simplejson路径。
import sys sys.path
添加simplejson路径,再import,成功。
sys.path.append('/Library/Python/2.5/site-packages/simplejson-3.6.5')
可是退出后又失效。
解决方法1是用PYTHONPATH,解决方法2是在Python脚本里动态添加,添加还须要判断重复,最好还能将路径标准化,对Windows系统作些处理。
这里采用代码里动态添加的方法,并且先无论Windows系统了。
import sys if not ('/Library/Python/2.5/site-packages/simplejson-3.6.5' in sys.path): sys.path.append('/Library/Python/2.5/site-packages/simplejson-3.6.5') try: import json except ImportError: import simplejson as json