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

  • 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。官方的说明是,

To preserve security, Hierarchy Viewer can only connect to devices running a developer version of the Android system.

还是有方法突破该限制的,操作起来有点麻烦,只能暂时舍弃By带来的便利。

于是只能通过控件坐标来操作控件了。

还好有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。

Google后知道原因,MonkeyRunner用的是Jython 2.5.3,可能是基于Python 2.5,Python 2.7之后才有json模块。

难倒得改用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..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

MonkeyRunner进坑——errors importing other modules的更多相关文章

  1. unittest框架进坑系列_(含selenium数据分离的坑)

    1.测试用例的执行顺序 有默认的顺序的,不是按你自己的排列执行,注意. 进坑原因,没有先执行制造变量的测试用例,导致其他用例无法找到变量值 2.数据分离的坑 在控制层 有函数嵌套,2个函数都必须带se ...

  2. Codeforces 977B Two-gram(stl之string掉进坑)

    Two-gram is an ordered pair (i.e. string of length two) of capital Latin letters. For example, " ...

  3. 百度移动统计调用api教程,少进坑(82001错误)

    相信很多小伙伴使用了百度统计,来查看自己应用使用的情况,但是会发现百度移动统计在官网没有api调用取数据的接口, 现在我就以自己成功调用api并且成功拿到数据,将这个步骤给大家参考,(末尾有调用移动统 ...

  4. Python Modules and Packages – An Introduction

    This article explores Python modules and Python packages, two mechanisms that facilitate modular pro ...

  5. 手机游戏渠道SDK接入工具项目分享(三)拨开云雾是个坑

    一直在纠结是先写框架设计还是先写掉过的坑,最后本这娱乐大众的态度先写掉过的坑让大家乐呵下. 项目开发过程中遇问题无数,回顾下8个大坑照成了项目一定程度上延期甚至返工. 项目一开始几个人把现有3家主流的 ...

  6. jQuery.zTree的跳坑记录

    最近项目用到树型结构的交互,一开始并不打算选择zTree,为了项目进度我妥协了,这一妥协后果就是我进坑了,在2天的挣扎中,我终于跳出坑了,活了下来,有一些感慨纪录下来. 有一个业务场景需要2个树型结构 ...

  7. [异常解决] ubuntu上安装JLink驱动遇到的坑及给后来者的建议

    一.前言 最近将整个电脑格式化,改成了linux操作系统 希望这样能让自己在一个新的世界探索技术.提升自己吧- win上的工具用多了,就不想变化了- 继上一篇<ubuntu上安装虚拟机遇到的问题 ...

  8. 廖雪峰js教程笔记4 sort排序的一些坑

    排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个对象呢?直接比较数学上的大小是没有意义的,因 ...

  9. 公网访问阿里云数据库MongoDB——填坑日记

    业务情景 两台服务器,一台阿里云ECS云服务器(专用网络),另一台是阿里云数据库MongoDB,处于安全考虑MongoDB是不运行外网连接的,那接下来就看怎么实现公网访问. 看到上面红色的网络类型描述 ...

随机推荐

  1. python多线程--Condition(条件对象)

    Condition class threading.Condition(lock=None 这个类实现条件变量对象.条件变量允许一个或多个线程等待,知道它们被另一个线程唤醒. 如果给出了lock参数而 ...

  2. SpringBoot用@ConfigurationProperties获取配置文件值

    SpringBoot的配置文件有yml和properties两种,看一些文章说yml以数据为中心,比较好.个人觉得properties更好用,所以这里以properties格式为例来说. 我们都知道@ ...

  3. Future接口和Callable接口以及FeatureTask详解

    类继承关系 Callable接口 @FunctionalInterface public interface Callable<V> { V call() throws Exception ...

  4. java遍历http请求request的所有参数实现方法

    方法一: 通过程序遍历http请求的所有参数放到hashmap中,用的时候方便了. 如果参数值有中文,那么需要在程序中添加filter转码,或者在下面程序里,对paramValue转码 Map map ...

  5. 揭开Future的神秘面纱——结果获取

    前言 在前面的两篇博文中,已经介绍利用FutureTask任务的执行流程,以及利用其实现的cancel方法取消任务的情况.本篇就来介绍下,线程任务的结果获取. 系列目录 揭开Future的神秘面纱—— ...

  6. 【详解】JNI (Java Native Interface) (二)

    案例二:传递参数给C代码,并从其获取结果 注:这里传递的参数是基本类型的参数,在C代码中有直接的映射类型. 此案例所有生成的所有文件如下: (1)编写案例二的Java代码,如下: 这里我们定义了一个n ...

  7. UVa 11988 Broken Keyboard(数组模拟链表)

    题目链接: https://cn.vjudge.net/problem/UVA-11988 /* 问题 将一段文本经过一定的规则处理后输出,规则就是[表示home键,表示光标跳到行首,]表示end键, ...

  8. .21-浅析webpack源码之事件流this-compilation

    上一节生成Compilation实例后,添加了一些属性,随后触发this-compilation事件流,如下: Compiler.prototype.newCompilation = (params) ...

  9. [转]Bootstrap table 分页 In asp.net MVC

    本文转自:https://www.cnblogs.com/lenovo_tiger_love/p/7474403.html 中文翻译文档: http://blog.csdn.net/rickiyeat ...

  10. [转]SQL Collation冲突解决 临时表

    本文转自:http://ju.outofmemory.cn/entry/191163 问题描述 在SQL Server中使用一些复杂的存储过程时,我们需要借用临时表来完成一些逻辑的处理,例如:数据的临 ...