monkeyrunner实践总结(重在总结遇到的问题)

上一篇 / 下一篇  2016-03-23 19:16:02 / 个人分类:step by step android测试

monkeyrunner工具使用jypthon。允许它与android框架进行交互,可以使用python语法来获取API中的常量、类及方法。
     1.1命令行直接执行 monkeyrunner XXX.py
     1.2除了使用monkeyrunner的API之外,还可以使用标准的python os和subprocess模块来调用如adb 这样的andriod工具。
monkeyrunner的图片对比代码也有人进行了移植,可以参考http://techgogogo.blog.51cto.com/3851580/1608586

monkeyrunner脚本编写及介绍网上一搜一大堆,找了个比较完整一点的demo,可以访问http://blog.csdn.net/vshuang/article/details/39783579这个地址来查看。

monkeyrunner API 主要通过下面三个包:

  • MonkeyRunner: 主要提供了 monkeyrunner 应用的辅助方法以及,用来链连接设备或是模拟器的方法,并提供 UI 支持等。
  • MonkeyDevice: 代表一个设备或是模拟器,提供安装,卸载应用的方法,启动一个 Activity,发送按键或是 Touch 事件等。
  • MonkeyImage: 代表一个截屏图像,可以截取不同格式的图像,比较两个 MonkeyImage 图像,保存图像等。

但是MonkeyDevice仅支持坐标操作空间,可移植性不强,但由于可用id操作控件的EasyMonkeyDevice的增补,使得它更加实用。EasyMonkeyDevice提供了一些根据ID进行touch,type,loacate,getText的方法,可以配合ID做很多事情。


上面提到的地址中的demo也很好理解,模拟器上运行是没有任何问题的,但是真机调试时EasyMonkeyDevice(device)报错:

05:44:01 E/hierarchyviewer: Unable to get view server version from device 154bb7c

05:44:03 E/hierarchyviewer: Unable to debug device 154bb7c

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

java.lang.RuntimeException: Could not connect to the view server

at com.android.chimpchat.hierarchyviewer.HierarchyViewer.setupViewServer(HierarchyViewer.java:57)

at com.android.chimpchat.hierarchyviewer.HierarchyViewer.<init>(HierarchyViewer.java:43)

at com.android.chimpchat.adb.AdbChimpDevice.getHierarchyViewer(AdbChimpDevice.java:96)

at com.android.monkeyrunner.easy.EasyMonkeyDevice.<init>(EasyMonkeyDevice.java:64)

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)


为了这个问题查阅了好多资料,终于有了结论,一口老血要吐出来了,整理如下:

Hiararchy Viewer能获取当前手机实时的UI信息,提供了根据ID找到viewnode,对viewnode的一些操作。它在连接手机时,手机上必须启动一个叫View Server的客户端与其进行socket通信。而在商业手机上,是无法开启view server的。

模拟器,或者一些debug版本的手机,就是光root估计也不行(http://stackoverflow.com/questions/27147772/easymonkeydevice-not-found-error-while-running-monkeyrunner-python-script这里也有提到) 。



如果不确定自己的手机是不是可以连接到Hiararchy Viewer,可以通过以下步骤确定(开启,然后查看):

adb shell service call window 1 i32 4939(开启命令,用此命令开启)

adb shell service call window 2 i32 4939(关闭命令)

adb shell service call window 3(查看状态)

若返回值是:Result: Parcel(00000000 00000001 '........') 说明View Server处于开启状态

若返回值是:Result: Parcel(00000000 00000000 '........') 说明View Server处于关闭状态

商业手机倒也不是绝对不可以,有篇文章中有介绍步骤,但是就是麻烦些http://maider.blog.sohu.com/255448342.html

其实手机root也分两种,一种是获取系统管理员权限,一种是应用授权,权限不一样。Hiararchy Viewer需要获取的是系统管理权限。

不过找到篇文章https://www.dup2.org/node/1538说小米手机是个例外,可以用开启命令开启起来,但是我亲试没用,哈哈。


TAG:

IDO老徐测试窝|软件测试圈 引用 删除 xuquan   /   2016-03-25 11:08:31
好文,赞
IDO老徐测试窝|软件测试圈 引用 删除 xuquan   /   2016-03-25 11:08:24
5
 

评分:0

我来说两句

Open Toolbar