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ソース配布にある例の 1 つであり、まさにあなたが求めていることを行います。

#! /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()メソッドはツリーを走査し、すべてのビューの変換引数として指定されたメソッドを呼び出します。この場合、提供されたメソッドの 1 つが使用され、View クラス、ID、およびテキスト (CIT) があればそれを出力します。

その他の情報については、http://dtmilano.blogspot.com/2012/02/monkeyrunner-interacting-with-views.html を参照してください

于 2012-10-09T16:14:16.127 に答える