【问题标题】:Android: get UI element tree from code (ChimpChat or monkeyrunner) over Hierarchy viewerAndroid:通过 Hierarchy 查看器从代码(ChimpChat 或 monkeyrunner)获取 UI 元素树
【发布时间】:2012-10-09 14:31:36
【问题描述】:

我想在不访问代码的情况下从(活动的)活动中获取所有活动的 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、...)来实现测试。

谢谢,苏伦

【问题讨论】:

    标签: android monkeyrunner gui-testing


    【解决方案1】:

    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 类、id 和文本 (CIT)(如果有)。

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

    【讨论】:

    • 很好的答案!非常感谢。你有一个有趣的博客:-)
    猜你喜欢
    • 2019-03-19
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    相关资源
    最近更新 更多