Android:通过Hierarchy查看器从代码(ChimpChat或monkeyrunner)获取UI元素树

时间:2012-10-09 14:31:37

标签: android monkeyrunner gui-testing

我希望从(活动)Activity中获取所有活动的UI元素,而无需访问代码。完全像Hierarchy Viewer Tool,只是来自代码。目前我在java中使用monkeyrunner工具后面的.jar文件,但是使用python API不会有问题,如果需要我可以切换。 :-) 所以我连接到模拟器并启动init HierarchyViewer,如下所示:

m_chimpchat = ChimpChat.getInstance(options);
m_device = m_chimpchat.waitForConnection(5000, ".*");
HierarchyViewer hv = m_device.getHierarchyViewer();

(相当于Python)

device = MonkeyRunner.waitForConnection()
hv = device.getHierarchyViewer()

但就是这样。我不知道如何从这里获取UI元素。它必须是可能的,因为层次结构查看器工具可以做到这一点。

如果可能,我想知道它是什么类型的UI组件,id,它的位置(x,y)及其txts(例如Button txt,TextView,...)来实现测试。

谢谢,Soeren

1 个答案:

答案 0 :(得分:4)

AndroidViewClientmonkeyrunner的扩展,它简化了一些事情并纠正了monkeyrunner单独给你错误的其他一些事情,比如一些视图的位置取决于几个条件(即状态栏存在)。

这是 AndroidViewClient 源代码发布中的一个示例,并且正是您所要求的:

#! /usr/bin/env monkeyrunner
'''
Copyright (C) 2012  Diego Torres Milano
Created on Feb 3, 2012

@author: diego
'''


import re
import sys
import os

# This must be imported before MonkeyRunner and MonkeyDevice,
# otherwise the import fails.
# PyDev sets PYTHONPATH, use it
try:
    for p in os.environ['PYTHONPATH'].split(':'):
        if not p in sys.path:
            sys.path.append(p)
except:
    pass

try:
    sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
except:
    pass

from com.dtmilano.android.viewclient import ViewClient

device, serialno = ViewClient.connectToDeviceOrExit()
ViewClient(device=device, serialno=serialno).traverse(transform=ViewClient.TRAVERSE_CIT)

ViewClient.traverse()方法遍历树并调用为每个View指定为transform参数的方法。在这种情况下,使用提供的方法之一打印View类,id和文本(CIT),如果有的话。

其他一些信息可以在http://dtmilano.blogspot.com/2012/02/monkeyrunner-interacting-with-views.html找到。