3

UI コントロール (ボタンなど) を見つけるのに 5 ~ 6 秒かかります。

2 つの質問:

1) なぜこんなに遅いのですか?

2)UIコントロールを見つけるためのより高速な方法または代替ソリューションはありますか(monkeyrunnerテストの範囲内)

4

3 に答える 3

3

Android のソース コードを少し調べたところ、monkeyrunner で findViewById を使用してコントロールを検索すると、Android で実行中のすべてのウィンドウのすべてのコントロールが実際に繰り返されることがわかりました。

したがって、破棄されていないために一時停止されている (そして表示されていない) アクティビティがある場合、findViewById はそれを検索するのに時間を費やします。

今のところいくつかのアイデアがあります

a) HieraryViewer で getFocusedWindowName API を使用して、正しいウィンドウが表示されることを確認します。最初にこのウィンドウを検索してから、findViewById(id, parent) メソッドで親として指定してみてください。この方法では、Android のすべてのウィンドウを検索するわけではありません。

2) com.android.chimpchat.hierarchyviewer.HierarchyViewer によって提供されるインターフェイスをバイパスして、DeviceBridge クラス (同じプロトコルに対して少し低いレベルを提供します) に直接移動してみてください。このような場合、すべてのウィンドウのすべてのコントロールを取得する代わりに、どのウィンドウを検索するかを正確に指定できます。

ロマンが指摘したように。HierarchyViewer は将来変更される可能性があります。ただし、テストの自動化の一環として、これに代わるものは他にありません。

于 2012-11-08T19:47:42.420 に答える
1

通常は、コントロールを 1 回だけ見つけてフィールドに格納するだけで十分です。

アダプタ ビューの場合、通常、子ビューへのすべての参照をオブジェクトに格納し、setTag() を使用してそのオブジェクトをビューにアタッチします。後で getTag() を使用して同じビューを取得できます。ネットでViewHolderの例を検索して、この手法を確認できます

5〜6秒かかるとは思いませんが、非常に多くのコントロールがあるかもしれません..

于 2012-11-06T19:53:00.413 に答える
0

AndroidViewClientは、HierarchyViewer と同じプロトコルに依存しているため高速ではありませんが、テストを作成するためのより簡単な代替手段を提供する可能性があります。

を見てみましょう。AndroidViewClient が既知の monkeyrunner バグの回避策を提供する場合もあります (このを参照してください) 。

于 2012-11-06T21:02:10.010 に答える