后知后觉,刚知道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. 坑爹的Sun JDK

    Sun的这个java.lang.Throwable 源码 设计非常糟糕,完全没有扩展性, 我在IBM 的Java JDK下,继承java.lang.Throwable重新定义了一个ExceptionW ...

  2. TypeScript设计模式之装饰、代理

    看看用TypeScript怎样实现常见的设计模式,顺便复习一下. 学模式最重要的不是记UML,而是知道什么模式可以解决什么样的问题,在做项目时碰到问题可以想到用哪个模式可以解决,UML忘了可以查,思想 ...

  3. odoo开发笔记 -- 前台不同视图访问同一个模型

    看一下partner这个表, 客户和供应商,都用这个表,那怎么区分呢: 供应商: 客户 注意这两个里面用domain来进行区分:   <field name="domain" ...

  4. (转)Linux 系统监控、诊断工具之 top命令详解

    原文:https://www.linuxidc.com/Linux/2014-12/110563.htm 目录 (1)系统.任务统计信息:(2)进程. cpu 统计信息:(3)最后两行为内存信息:3. ...

  5. (转载)elasticsearch 查询(match和term)

    原文地址:https://www.cnblogs.com/yjf512/p/4897294.html elasticsearch 查询(match和term) es中的查询请求有两种方式,一种是简易版 ...

  6. spring cloud sleuth

    新建spring boot工程trace-1,添加pom依赖 <dependency> <groupId>org.springframework.cloud</group ...

  7. 常见数据结构的Java实现

    单链表的Java实现 首先参考wiki上的单链表说明,单链表每个节点包含数据和指向链表中下一个节点的指针或引用.然后看代码 import java.lang.*; public class Singl ...

  8. docker(一)

    一.docker 概述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 linux 机器上,也可以实现虚拟化.容器是完全使用沙箱 ...

  9. MySQL Replication之主从切换

    在生产环境中,我们的架构很多都是一主多从.比如一个主数据库服务器M,两个从数据库服务器S1,S2同时指向主数据库服务器M.当主服务器M因为意外情况宕机,需要将其中的一个从数据库服务器(假设选择S1)切 ...

  10. 使用ssh-keygen生成ssh公钥和私钥

    默认是在用户目录下: windows一般为 c:\User\username\.ssh下 linux一般为 /home/username/.ssh 生成的命令如下: ssh-keygen -t rsa ...