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

Android:通过层次结构查看器从代码(ChimpChat或monkeyrunner)获取UI元素树,android,monkeyrunner,gui-testing,Android,Monkeyrunner,Gui Testing,我想从(活动的)活动中获取所有活动的UI元素,而无需访问代码。和代码完全一样。目前,我在java中使用monkeyrunner工具后面的.jar文件,但使用python API不会有问题,如果需要,我可以切换。:-) 因此,我连接到emulator并启动init HierarchyViewer,如下所示: m_chimpchat = ChimpChat.getInstance(options); m_device = m_chimpchat.waitForConnection(5000, ".*

我想从(活动的)活动中获取所有活动的UI元素,而无需访问代码。和代码完全一样。目前,我在java中使用monkeyrunner工具后面的.jar文件,但使用python API不会有问题,如果需要,我可以切换。:-) 因此,我连接到emulator并启动init HierarchyViewer,如下所示:

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

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

如果可能的话,我想知道它是什么类型的UI组件,一个id,它的位置(x,y)和它的txt(例如按钮txt,TextView,…)来实现测试

谢谢,Soeren

monkeyrunner
的一个扩展,它简化了一些事情,也纠正了
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()
方法遍历树,并为每个视图调用指定为转换参数的方法。在这种情况下,使用提供的方法之一打印视图类、id和文本(CIT)(如果有)

其他一些信息可以在中找到。

是对
monkeyrunner
的扩展,它简化了一些事情,也纠正了
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()
方法遍历树,并为每个视图调用指定为转换参数的方法。在这种情况下,使用提供的方法之一打印视图类、id和文本(CIT)(如果有)


有关其他信息,请访问。

回答得很好!非常感谢你。你有一个有趣的博客:-)回答得很好!非常感谢你。你有一个有趣的博客:-)