zoukankan      html  css  js  c++  java
  • MonkeyRunner进坑——errors importing other modules

    后知后觉,刚知道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.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
  • 相关阅读:
    mysql 应用 持续更新2 转载
    sql server 用触发器记录增删改操作(转载)
    mysql 应用 持续更新
    oracle 常用指令(持续更新中....)
    转载-Oracle 数据库导入导出 dmp文件
    Web Service 服务无法连接Oracle数据库
    关于jquery获取服务器端xml数据
    Navicat Premium 自动备份mysql和sqlserver
    浅谈如何更好的打开和关闭ADO.NET连接池
    JSON 的优点
  • 原文地址:https://www.cnblogs.com/loveisbug/p/4196315.html
Copyright © 2011-2022 走看看