3

找到一些 UI 控件(例如按钮)需要 5-6 秒。

两个问题:

1)为什么这么慢?

2)有没有办法让它更快或寻找UI控件的替代解决方案(在monkeyrunner测试范围内)

4

3 回答 3

3

我稍微查看了 Android 源代码,发现当您在 monkeyrunner 中使用 findViewById 搜索控件时,它实际上会遍历 Android 中所有正在运行的窗口上的所有控件。

因此,如果您有一些 Activity 被暂停(并且不可见),未被销毁,findViewById 将花时间搜索它。

我现在有几个想法

a) 在 HierarhyViewer 上使用 getFocusedWindowName API 检查是否显示了正确的窗口。尝试先搜索此窗口,然后在 findViewById(id, parent) 方法中将其指定为父窗口。这样,我们就不会搜索 Android 上的所有窗口。

2) 尝试绕过 com.android.chimpchat.hierarchyviewer.HierarchyViewer 提供的接口,直接进入 DeviceBridge 类(它为相同的协议提供了一点低级)。在这种情况下,我们可以精确地指出应该搜索哪个窗口,而不是获取所有窗口的所有控件。

正如罗曼指出的那样。HierarchyViewer 将来可能会发生变化。但是,作为测试自动化的一部分,我没有看到任何其他替代品。

于 2012-11-08T19:47:42.420 回答
1

通常只需找到一次控件并将其存储在字段中就足够了。

在适配器视图的情况下,它们通常将对其子视图的所有引用存储在一个对象中,然后使用 setTag() 将该对象附加到视图。稍后可以使用 getTag() 为同一视图检索它。您可以在网上搜索 ViewHolder 示例以查看此技术

我怀疑虽然它需要 5-6 秒,但也许你有这么多的控​​制..

于 2012-11-06T19:53:00.413 回答
0

AndroidViewClient虽然不是更快,因为它依赖于与 HierarchyViewer 相同的协议,但它可以提供更简单的替代方法来编写测试。

看看例子。在某些情况下,AndroidViewClient 为已知的 monkeyrunner 错误提供了解决方法(请参阅此示例

于 2012-11-06T21:02:10.010 回答