Android自动化学习笔记:编写MonkeyRunner脚本的几种方式

时间:2022-01-26 08:22:02

----------------------------------------------------------------------------------------------------------------------------

小记: 之前用的是公司自己研发的自动化工具,对市面开源的自动化工具知之甚少,所以开始自学开源的自动化工具。

初步学习中,难免会有疏漏和想不到的地方,随着不断深入的了解,如有新的体会,会及时修改,不断进步。

2014-10-17:初版

2014-10-20: 更新通过ID写脚本的实例

2014-10-23:更新HierarchyViewer提示和获取ID的方法

2014-10-24:更新第三方插件内容

2014-10-27:更新Q&A--解决了困扰两天的问题

2016-2-24:删除一种方式

------------------------------------------------------------------------------------------------------------------------------

提示:

如果HierarchyViewer无法在市场上的android手机上使用,使用的条件是手机必须是工程机:

1.手机已经Root

2.设备支持启动view service

二者缺一不可。

可以看下Android的官方文档中提到这么一句:
To preserve security, Hierarchy Viewer can only connect to devices running a developer version of the Android system.

翻译过来意思就是说:出于安全考虑,Hierarchy Viewer只能连接Android开发版手机或是模拟器

网上有一些如何把手机root和打开view service的文章,建议不要尝试,手机容易变砖或者不断重启

如果实在按耐不住想拿自己手机试试,可以访问这里:如何在Root的手机上开启ViewServer,使得HierachyViewer能够连接

================================================================================

研究monkeyrunner已经有5天了,前面更新了几篇笔记,先总结一下感觉:

  • MonkeyRunner可以通过获取坐标点去点击目标对象,在引入EasyMonkeyDevice后可以根据ID进行点击对象
  • MonkeyRunner也有第三方的插件,增加了一些实用方法,不过没有花时间尝试
  • Eclipse上写Python代码时,很多对象没有成员函数提示(即使导入过jar包也无用,不过如果写过同样的代码,放在同包的其他文件里,会有部分成员函数的提示信息) :如MonkeyRunner.waitForConnection()获得device对象后,后面devie.不能自动提示可用成员函数
  • 性能不是很好,在使用hierarchyviewer获取ID时,明显感觉需要很长时间
  • 稳定性也不是很好,在使用hierarchyviewer获取ID时,有时候成功,有时候会失败
  • 没有任何junit的继承,尝试使用unit框架来使用MonkeyRunner,不过遇到importError。
  • 官网API更新不及时,资料很少,网上找来找去,内容基本都相差无几
  • 不过相较robotium支持多设备连接,这个确实是一大优点

今天内容是整理一下最新学到的monkeyrunner脚本的几种方式。

1. 通过光标定位,采用上下左右导航键控制(记忆中是Android刚出来的时候,寝室室友买了个HTC的机子有导航键,现在的机子基本都是直板,所以……)

上:device.press(“KEYCODE_DPAD_UP”,”DOWN_AND_UP”)
下:device.press(“KEYCODE_DPAD_DOWN”,”DOWN_AND_UP”)
左:device.press(“KEYCODE_DPAD_LEFT”,”DOWN_AND_UP”)
右:device.press(“KEYCODE_DPAD_RIGHT”,”DOWN_AND_UP”)

2. 通过指定坐标的方式(这种方式是最直接的,也是最笨的,因为不同设备的分辨率不同,脚本不可复用,不过可以直接计算出新的坐标,以后再说……)

详细测试脚本可参照:Android自动化学习笔记:MonkeyRunner官方介绍和简单实例 实例是用HierarchyViewer得到坐标,然后touch坐标或者press key event写的monkeyrunner脚本。 
触摸:touch (integer x, integer y, integer type) Sends a touch event specified by type to the screen location specified by x and y.

点击:press (string name, dictionary type) Sends the key event specified by type to the key specified by keycode.

3. 通过录制回放的方式(这种方式能够迅速生成一个脚本,不过不是python的脚本)

详细测试脚本可参照:Android自动化学习笔记:MonkeyRunner录制和回放

4. 通过获取控件文本的方式(用于apk里控件文本不相同的时候使用,所以如果文本显示相同的话,不可使用,这需要采用第三方插件viewClient)

详细配置和使用方法可参考: https://github.com/dtmilano/AndroidViewClient 自己去看咯.

已经独立成单独一个工具,可以忽略。

5. 通过获取控件ID的方式(这种方式比较合适,写一次脚本适用于不同分辨率的手机,但是也需要APK的ID不重复)

下面对calculator.apk来写monkeyrunner脚本:

得到ID: 打开HierarchyViewer->点击Load view Hierarchy

aaarticlea/png;base64,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*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" alt="" />

A. 第一种写法:获取HierarchyViewer对象

这里我们也有两个方法:
①可以引入 from com.android.chimpchat.hierarchyviewer import HierarchyViewer

②也可以直接通过hierarchyviewer = device.getHierarchyViewer()来创建

monkeydevice里的源码:

aaarticlea/png;base64,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" alt="" />

示例:

获取控件viewNode->得到中心点坐标->选择

'''
Created on Oct 20, 2014 @author: deldong
'''
import sys from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice,MonkeyImage logFile = open("C:\\monkeyrunner_log.txt","a+") #连接设备
device = MonkeyRunner.waitForConnection()
if not device:
print("Please connect a device to start!")
logFile.write("Please connect a device to start!\n")
else:
print("Device Connected successfully!")
logFile.write("Device Connected successfully!\n") package = 'com.android.calculator2'
activity = 'com.android.calculator2.Calculator'
runComponent = package + '/' + activity #启动计算器
print("Start calculator")
logFile.write("Start calculator")
device.startActivity(component=runComponent) #等待时间
print("Wait 15s")
logFile.write("Wait 15s")
MonkeyRunner.sleep(15) #获取控件对象
print("Get widget object")
logFile.write("Get widget object")
hierarchyviewer = device.getHierarchyViewer()
#得到8,9,*,=的viewnode对象
#举例:viewNode对象的值:com.android.calculator2.CalculatorDisplay@b3ffd170
viewDigit8 = hierarchyviewer.findViewById("id/digit8")
viewDigit9 = hierarchyviewer.findViewById("id/digit9")
viewMul = hierarchyviewer.findViewById("id/mul")
viewEqual = hierarchyviewer.findViewById("id/equal") #获取控件的中心坐标
#举例:pointView的中心点坐标的值:Point {240, 116}
print("Get location of view")
logFile.write("Get location of view")
pointViewDigit8 = hierarchyviewer.getAbsoluteCenterOfView(viewDigit8)
pointViewDigit9 = hierarchyviewer.getAbsoluteCenterOfView(viewDigit9)
pointViewMul = hierarchyviewer.getAbsoluteCenterOfView(viewMul)
pointViewEqual = hierarchyviewer.getAbsoluteCenterOfView(viewEqual) #计算8*9=72的结果
print("touch 8*9=")
logFile.write("touch 8*9=")
MonkeyRunner.sleep(5)
device.touch(pointViewDigit8,'DOWN_AND_UP')
device.touch(pointViewMul,'DOWN_AND_UP')
device.touch(pointViewDigit9,'DOWN_AND_UP')
device.touch(pointViewEqual,'DOWN_AND_UP') logFile.close()

 B. 第二种写法:通过EasyMonkeyDevice类和By类来调用控件ID

'''
Created on Oct 23, 2014 @author: deldong
'''
import sys
import math
reload(sys)
sys.setdefaultencoding("utf-8") from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice
from com.android.monkeyrunner.easy import EasyMonkeyDevice
from com.android.monkeyrunner.easy import By #connect device
print('connect device!')
device = MonkeyRunner.waitForConnection() #start activity
print('start activity')
package = 'com.android.calculator2'
activity = 'com.android.calculator2.Calculator'
runComponent = package + '/' + activity
device.startActivity(component=runComponent)
MonkeyRunner.sleep(15) #init easymonkeydevice object ,this is init method
print('init easymonkeydevice')
easy_device = EasyMonkeyDevice(device) print('Tap 8')
easy_device.touch(By.id('id/digit8'),MonkeyDevice.DOWN_AND_UP)
MonkeyRunner.sleep(1.0)
print('Tap *')
easy_device.touch(By.id('id/mul'),MonkeyDevice.DOWN_AND_UP)
MonkeyRunner.sleep(1.0)
print('Tap 9')
easy_device.touch(By.id('id/digit9'),MonkeyDevice.DOWN_AND_UP)
MonkeyRunner.sleep(1.0)
print('Tap =')
easy_device.touch(By.id('id/equal'),MonkeyDevice.DOWN_AND_UP) MonkeyRunner.sleep(1.0)
pic = device.takeSnapshot()
pic.writeToFile('./result.png','png')
print('test finished!')

 C. 第三种写法:通过wrapeasymonkey来写

先上网址(打不开的用代理) :

https://sourceforge.net/projects/wrapeasymonkey/

http://blog.whoistester.com

中文博客:http://lihao.cf/category/my-work/wrapeasydevice/

在官网上复制的内容:

本文章内容在仅windows 7上经过试验,使用该库主要目的,
1. 将monkeyDevice 与 easyMonkeyDevice统一封装到库
2. 进行自动化操作时, 增加对异常处理,防止异常退出 (例如 当某textview未显示出来时, 捕捉对该textview的操作异常,防止测试脚本异常退出. 如果手动在脚本里加入sleep语句, 但sleep的时间难以指定)
3. 增加了一些比较便捷的函数, 降低了使用 monkeyDevice 和 easyMonkeyDevice 的复杂度。
另需要说明的是: 该wrapEasyMonkey 库是加入了androidviewclient库。 androidviewclient库是Diego Torres Milano 开发的。

如何使用呢。 请先到sourceforge进行下载wrapEasyMonkey源码。(可能需要挂代理)

Q&A:

问题1:执行时,出现importError : no module named xxx的异常:

解决方法:

这个问题比较麻烦,因为直接用python + 文件方式,就可以正常执行。

但是用monkeyrunner + 文件的方式,就会有importError产生。

捣鼓了几天,一直没搞清楚到底是哪里的问题。不过今天很开心的是,尝试出一个临时解决这个问题的方式。

写了一个简单的脚本说明:

package1包里有个testPy文件:

import sys
print(sys.path) from package2 import helperPy helperPy.printHelper() if __name__ == '__main__':
pass

package2包里有个helperPy文件,里面有个printHelper方法

'''
Created on Oct 27, 2014 @author: deldong
''' def printHelper():
print("this is print helper") if __name__ == '__main__':
pass

执行:

aaarticlea/png;base64,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" alt="" />

可以看出,环境变量里,只有package1的文件路径,没有package2的。

那怎么办呢,解决方式就是,咱们自己把package2给加进去。

import sys
sys.path.append("C:\\Nokia\\adt-bundle-windows-x86-20140702\\eclipse\\workspace\\项目名")

解决问题灵感来自:

1. Monkeyrunner ImportError: No module named util

2. python怎么import指定文件夹下的模块

3. Python中导入子文件夹中的模块

问题2: wrapEasyMonkey.py脚本报错,提示:'ImportError: cannot import name ViewNode'

解决方法:将wrapEasyMonkey.py脚本中的from com.android.hierarchyviewerlib.device import ViewNode修改为from com.android.hierarchyviewerlib.models import ViewNode

Android自动化学习笔记:编写MonkeyRunner脚本的几种方式的更多相关文章

  1. Android自动化学习笔记之MonkeyRunner:官方介绍和简单实例

    ---------------------------------------------------------------------------------------------------- ...

  2. Android自动化学习笔记之MonkeyRunner:用Eclipse执行MonkeyRunner脚本

    Info: 初步学习,难免会有疏漏,以后我会不断修改补全,直到完美.转载请注明出处,谢谢. 2014-10-11: 初版 2014-10-16: 完善 ------------------------ ...

  3. Android自动化学习笔记之MonkeyRunner:MonkeyRunner环境搭建

    ---------------------------------------------------------------------------------------------------- ...

  4. Android自动化学习笔记之MonkeyRunner:MonkeyRunner的录制和回放

    ---------------------------------------------------------------------------------------------------- ...

  5. Android自动化学习笔记:获取APK包名的几种方法

    ---------------------------------------------------------------------------------------------------- ...

  6. Android自动化学习笔记之Robotium:学习官网实例

    ---------------------------------------------------------------------------------------------------- ...

  7. 0036 Java学习笔记-多线程-创建线程的三种方式

    创建线程 创建线程的三种方式: 继承java.lang.Thread 实现java.lang.Runnable接口 实现java.util.concurrent.Callable接口 所有的线程对象都 ...

  8. struts2学习笔记--总结获取servletAPI的几种方式

    struts2的Action放弃了request,response等ServletAPI,使得在业务层上更加独立,在有时候使用struts2进行Web开发的时候,不可避免的要在action中使用ser ...

  9. Linux学习笔记21——线程同步的两种方式

    一  用信号量同步 1 信号量函数的名字都以sem_开头,线程中使用的基本信号量函数有4个 2 创建信号量 #include<semaphore.h> int sem_init(sem_t ...

随机推荐

  1. java web学习总结&lpar;二&rpar; -------------------TOMCAT使用帮助(一)

    一.Tomcat服务器端口的配置 Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文件. 如果想修改Tomcat服务器的启动端口,则可以在server.xml ...

  2. 计算机术语install和setup的区别

    作为安装程序的Setup文件是软件的开发者专门为其软件设计的.exe文件,是当前最为盛行的安装程序.在运行该Setup文件进行软件安装时,Setup除了进行复制.改名.解压和目录维护等基本安装工作外, ...

  3. Spring入门(1)-第一个Spring项目

    1. 创建maven项目,maven相关配置如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi= ...

  4. -&lowbar;-&num;【Better JS Code】严格模式

    要在整个脚本中启用严格模式,可以在顶部添加如下代码: "use strict"; 这行代码看起来像是字符串,而且也没有赋值给任何变量,但其实它是一个编译指示,用于告诉支持的 Jav ...

  5. IE6的兼容性以及处理方法

    1. 当我们写了一段正确的代码,但是在不同浏览器下,产生一些不正确的解析,这叫做兼容性问题 2. 在IE6下 ,标准盒模型: width/height = content; 可视宽/高 = conte ...

  6. JAVA 中的接口(interface)

    我们一般将一个抽象类中所有方法都是抽象方法的抽线类定义为接口,接口时由常量和抽象方法组成的特殊类,即接口里面连构造方法也没有.接口通常用“interface”关键字来声明,一个类通过继承接口的方式,从 ...

  7. alfs学习笔记-安装和使用blfs工具

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 一名linux爱好者,记录构建Beyond Linux From Scratch的过程 经博客园-骏马金龙前辈介绍,开始接触学习 ...

  8. https&colon;&sol;&sol;github&period;com&sol;gaoyangxiaozhu&sol;DockerVI

    [更新]分享一个开源项目DockerVI,一个基于NodeJS实现的Docker Swarm可视化解决方案

  9. zookeeper入门之Curator的使用之几种监听器的使用

    package com.git.zookeeper.passwordmanager.listener; import java.util.ArrayList; import java.util.Lis ...

  10. Java -- 获取MAC地址

    啦啦啦 package com.xindatai.common.util; import java.io.InputStream; import java.util.regex.Matcher; im ...