我希望从(活动)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
答案 0 :(得分: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指定为transform参数的方法。在这种情况下,使用提供的方法之一打印View类,id和文本(CIT),如果有的话。
其他一些信息可以在http://dtmilano.blogspot.com/2012/02/monkeyrunner-interacting-with-views.html找到。