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