0

我想在不访问代码的情况下从(活动的)活动中获取所有活动的 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 元素。这一定是可能的,因为 Hierarchy Viewer Tool 可以做到这一点。

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

谢谢,索伦

4

1 回答 1

4

AndroidViewClient是一个扩展,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()方法遍历树并调用指定为每个视图的变换参数的方法。在这种情况下,使用提供的方法之一打印 View 类、id 和文本 (CIT)(如果有)。

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

于 2012-10-09T16:14:16.127 回答