找到一些 UI 控件(例如按钮)需要 5-6 秒。
两个问题:
1)为什么这么慢?
2)有没有办法让它更快或寻找UI控件的替代解决方案(在monkeyrunner测试范围内)
找到一些 UI 控件(例如按钮)需要 5-6 秒。
两个问题:
1)为什么这么慢?
2)有没有办法让它更快或寻找UI控件的替代解决方案(在monkeyrunner测试范围内)
我稍微查看了 Android 源代码,发现当您在 monkeyrunner 中使用 findViewById 搜索控件时,它实际上会遍历 Android 中所有正在运行的窗口上的所有控件。
因此,如果您有一些 Activity 被暂停(并且不可见),未被销毁,findViewById 将花时间搜索它。
我现在有几个想法
a) 在 HierarhyViewer 上使用 getFocusedWindowName API 检查是否显示了正确的窗口。尝试先搜索此窗口,然后在 findViewById(id, parent) 方法中将其指定为父窗口。这样,我们就不会搜索 Android 上的所有窗口。
2) 尝试绕过 com.android.chimpchat.hierarchyviewer.HierarchyViewer 提供的接口,直接进入 DeviceBridge 类(它为相同的协议提供了一点低级)。在这种情况下,我们可以精确地指出应该搜索哪个窗口,而不是获取所有窗口的所有控件。
正如罗曼指出的那样。HierarchyViewer 将来可能会发生变化。但是,作为测试自动化的一部分,我没有看到任何其他替代品。
通常只需找到一次控件并将其存储在字段中就足够了。
在适配器视图的情况下,它们通常将对其子视图的所有引用存储在一个对象中,然后使用 setTag() 将该对象附加到视图。稍后可以使用 getTag() 为同一视图检索它。您可以在网上搜索 ViewHolder 示例以查看此技术
我怀疑虽然它需要 5-6 秒,但也许你有这么多的控制..
AndroidViewClient虽然不是更快,因为它依赖于与 HierarchyViewer 相同的协议,但它可以提供更简单的替代方法来编写测试。
看看例子。在某些情况下,AndroidViewClient 为已知的 monkeyrunner 错误提供了解决方法(请参阅此示例)