我们从Navigation Drawer
库中获得了 support.v4
的应用。我们使用Robotium
自动执行UI测试,一切正常,但Navigation Drawer
可以随机冻结,因此某些测试可能会随机失败。
这绝对不是Robotium
问题,因为我看到Navigation Drawer
如何在我的设备上的其他应用中冻结,也在我自己的应用中。
我已经尝试通过此问题解答Navigation Drawer
来修复Why does DrawerLayout sometimes glitch upon opening?
它帮助和随机冻结从90%减少到大约10%,但10%的测试运行可能会失败,这非常糟糕,特别是对于持续集成......
可能有人已经解决了这个问题吗?答案 0 :(得分:3)
我在Robotium测试中遇到了同样的问题,我最终使用的解决方案是模拟拖动手势(真实用户如何刷开抽屉)而不是尝试单击抽屉切换或使用{{ 1}}方法。我似乎注意到运行早于SDK 18的Android设备上的间歇性故障。
我将此方法放在我们自己的solo
子类中,并且自从(数百次运行)以来我们没有进行过失败的测试。
Solo
答案 1 :(得分:2)
我也在使用android.support.v4.widget.DrawerLayout
并且找不到任何方法只是。
我终于使用下面的代码
打开了抽屉/**
* As we use app compat it seems Solo#setNavigationDrawer is not doing well
* (drawer does not open, but the button is clicked)
*
* Same result for clickOnView(getView(android.R.id.home))
*
* This code opens the navigation drawer on the main thread
* Be aware : you need to provide your DrawerLayout id (you can do it in params)
*/
public void openCompatNavigationDrawer() {
getInstrumentation().runOnMainSync(new Runnable() {
@Override
public void run() {
((DrawerLayout) mSolo.getView(R.id.drawer_layout))
.openDrawer(Gravity.LEFT);
}
});
}
此处提供的要点https://gist.github.com/quentin7b/9b51a3827c842417636b
答案 2 :(得分:0)
打开抽屉导航:solo.clickOnScreen(50, 50);
在抽屉导航中选择列表项:
ListView listView = (ListView) solo.getView(R.id.left_drawer);
View SwitchOrganizations = listView.getChildAt(0);
solo.clickOnView(SwitchOrganizations);