MonkeyRunner进坑——errors importing other modules

后知后觉,刚知道Android提供了MonkeyRunner这么个东西,能用来干吗呢,官方文档介绍得很清楚。简单说,能够用Python程序经过API,html

  • installs an Android application or test package,
  • runs it,
  • sends keystrokes to it,
  • takes screenshots of its user interface,
  • stores screenshots on the workstation.

还提供了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
相关文章
相关标签/搜索