wrapEasyMonkey howto入门教程1.1
从名字你就能看出, 这个库是对easyMonkeyDevice的封装.
(该文档仅适用于wrapEasyMonkey 1.1 Copyright(c) whoistester.com) 另:2.0 已经发布,关于2.0请访问这里
本文章内容在仅windows 7上经过试验
使用该库主要目的,
1. 将monkeyDevice 与 easyMonkeyDevice统一封装到库
2. 进行自动化操作时, 增加对异常处理,防止异常退出 (例如 当某textview未显示出来时, 捕捉对该textview的操作异常,防止测试脚本异常退出. 如果手动在脚本里加入sleep语句, 但sleep的时间难以指定)
3. 增加了一些比较便捷的函数, 降低了使用 monkeyDevice 和 easyMonkeyDevice 的复杂度。
另需要说明的是: 该wrapEasyMonkey 库是加入了androidviewclient库。 androidviewclient库是Diego Torres Milano 开发的。
如何使用呢。 请先到sourceforge进行下载wrapEasyMonkey源码。sourceforge网站,在某些地区被封锁了,请尝试使用代理访问. 对无耻封锁该网站的管理商,进行B视.
1. 首先你需要有最新的android sdk.
这只是一个sdk manager工具。下载安装后,并打开。 可以看到有tools,Android不同版本的sdk platform等(例如Android 4.0.3 api15 , api 13), 还有Extras。
注意我们这里至少需要下载tools里的Android SDK tools 和 Android SDK Platform-tools。 如果你已经有下载过, 建议您升级到最新的版本。 因为sdk 经常有更新,有些文件会有变动,包括文件夹的组织结构。
2. 将下载到的wrapEasyMonkey源码zip包。解压后放到某个目录。 您可以解压到sdk里的tools文件夹的lib子文件夹。 当然放到哪里都ok,因为之后我们设定环境变量,以便让monkeyrunner 执行脚本的时候可以加载到这些库。 但未了便于您的管理, 所以建议放到sdk里的某个目录。
3. 设定环境变量。 设定环境并不是必须的, 但如果不设定,那么意味着您的程序和库文件的位置不能够是灵活的。 就是说代码中必须写死您加载库的地址。 当然我们不像这么做。
1) 首先我们要添加的是 Android_HOME 环境变量。
2) 然后是ANDROID_WRAPEASYMONKEY_HOME 环境变量。 后者是指的您的wrapEasyMonkey源码的解压路径。 例如 C:\Users\hp\Downloads\AndroidViewClient\wrapEasyMonkey 进入后,我们可以看到如下的目录结构就对了。
3个文件夹(examples, src, tests) , 2个文件(.project, .pydevproject)
3) 最后我们将android sdk里的tools文件夹和platform-tools文件夹加到系统环境变量path里。这样我们可以方便的调用tools的命令了。例如adb, ddms, hierachyviewer等。
4. 写测试脚本。
如下是一个测试脚本例子(wrapEasyMonkey 1.1 api 具体说明及介绍)。 当然例子也可以去wrapEasyMonkey里的例子文件夹找例子。
#! /usr/bin/env monkeyrunner
''' Copyright (C) 2012 whoistester.com
@author: whoistester ''' import re import sys import os import string import locale ''' 将库的地址添加到系统路径 ''' try: ANDROID_VIEW_CLIENT_HOME = os.environ['ANDROID_WRAPEASYMONKEY_HOME'] except KeyError: print >>sys.stderr, "%s: ERROR: ANDROID_VIEW_CLIENT_HOME not set in environment" % __file__ sys.exit(1) sys.path.append(ANDROID_WRAPEASYMONKEY_HOME + '/src') sys.setdefaultencoding('utf-8') from com.dtmilano.android.viewclient import ViewClient from com.dtmilano.android.wrapEasyMonkey import wrapEasyMonkey from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice from com.android.monkeyrunner.easy import EasyMonkeyDevice from com.android.monkeyrunner.easy import By package = 'com.android.contacts' activity = '.activities.PeopleActivity' component = package + "/" + activity device = MonkeyRunner.waitForConnection(10) #连接device device.startActivity(component=component)# 启动联系人应用 easyDevice = EasyMonkeyDevice(device) #生成easyDevice 对象 wrapdevice = wrapEasyMonkey(easyDevice,device) #由easyDevice,device 生成wrapEasyMonkey对象 create_contact_button = wrapdevice.getView('id/create_contact_button') # 通过wrapEasyMonkey对象获得创建新联系人的view视图对象 wrapdevice.touchView(create_contact_button,wrapdevice.DOWN_AND_UP) #对该view进行点击操作,该函数会调用easyMonkey api,
自动获得该view的坐标值,并进行touch行为。 wrapdevice.sleep(2) # 睡眠2秒wrapdevice.touchDialogButton(2) #对弹出的对话框,进行选择 , 参数为1 时, 选择左边的按钮, 参数2时,选择右边的按钮。 为什么没有用touchView函数,
是因为当前最新的layout分析有问题,
#不能获得对话框的alertdialog的正确的坐标值。 所以这里的touchDialogButton是通过上下的方向键进行控制的。
wrapdevice.touchViewById('id/0x3',wrapdevice.DOWN_AND_UP) #touchViewById 可以直接对view的id进行直接touch, 不需要中间先获得该view的对象。
wrapdevice.type('test01') # 输入字符
5. 执行测试脚本。 打开dos命令窗口或者linux的shell terminal。 运行
“monkeyrunner 脚本路径和名称”。 执行之前确信您已经正确安装了手机的驱动. 可以通过adb devices 进行查看.
此篇文章已被阅读11670 次
好的谢谢,不过ID相同情况确实很多。。例如setting里所有的item。如果能把所有相同ID作为一个数列来集合起来就完美了。第一个ID为 id/id_name[0],第二个为id/id_name[1].
Android自动化测试之Monkeyrunner解决ID重复问题
http://www.whoistester.com/forum/Android%E8%87%AA%E5%8A%A8%E5%8C%96/417-Android%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E4%B9%8BMonkeyrunner%E8%A7%A3%E5%86%B3ID%E9%87%8D%E5%A4%8D%E9%97%AE%E9%A2%98.html
相同ID的,只能定位第一个,其它的怎么定位呢
对不起, 应该是无法支持. 通常id 需要作为唯一的标识, 如果确实有相同的id, 请学习下by.java 及相关的源代码. easyapi 是android官方的一个库, 在monkeyrunner里面. 目前android官方没有抓们讲该api, 所以请下载monkeyrunner 或者通过git hub 去浏览下相关的源代码.
并非发表评论,是先讨教一个问题。
这两个我无法引入
from com.dtmilano.android.viewclient import ViewClient
from com.dtmilano.android.wrapEasyMonkey import wrapEasyMonkey
出现以下错误
ImportError:No module Named dtmilano
是环境没有配置好吗:
1.我只是把wrapEasyMonkey下载解压的wrapeasymonkey.jar放到了tools\tools\lib下
2.把AndroidViewClient文件夹放到一个地方,并设置环境变量
ANDROID_VIEW_CLIENT_HOME=D:\Android-sdk\Android\AndroidViewClient;
3.Android_HOME=D:\Android-sdk\Android\android-sdk
4.tools文件夹和platform-tools也放到path中了
哪个地方不对吗?
附:wrapeasymonkey.jar我解压后看到里面的文件没有class文件,全是pathon,这样对吗?
哥们, 可能blog中有写的不清楚的地方. 对于2.0 版本开始, 也就是你提到的 wrapeasymonkey.jar 这个版本, package 包名已经做改变. 请根据此文的实例代码进行.
http://blog.whoistester.com/wrapeasymonkey-2-0-released/
需要 from com.whoistester.android.testimport import os,sys,re,string,locale,ViewClient,wrapEasyMonkey,MonkeyDevice,MonkeyRunner,EasyMonkeyDevice,By
具体请看文章吧. 2.0 增加封装了更多的东西, 你可以直接抛弃老版本的内容.