导航抽屉的应用程序的Robotium UItesting

我们从support.v4库中获得了Navigation Drawer的应用程序。 我们使用Robotium自动进行UItesting,一切正常,但Navigation Drawer可以随机冻结,因此一些testing可能会随机失败。

这绝对不是一个Robotium问题,因为我看到Navigation Drawer如何在我的设备上的其他应用程序中冻结,也在我自己的应用程序中。

我已经尝试了解决这个问题的Navigation Drawer : 为什么DrawerLayout有时会在打开时出现问题?

它帮助和随机冻结从90%下降到10%左右,但10%的testing运行可能会失败,这是非常糟糕的,尤其是持续集成…

可能有人已经解决了这个问题?

Solutions Collecting From Web of "导航抽屉的应用程序的Robotium UItesting"

我遇到了与我们的Robotiumtesting相同的问题,我最终要做的解决scheme是模拟拖动手势(真实用户如何滑动打开抽屉),而不是尝试单击抽屉切换或使用solo方法。 我似乎注意到在运行比SDK 18更早的Android设备上经常出现间歇性故障。

我把这个方法放在Solo自己的子类中,我们没有失败的testing(超过几百次运行)。

 /** * Open the navigation drawer with a drag gesture. Click based triggering is * flaky on SDK < 18 */ public void openNavigationDrawer() { Point deviceSize = new Point(); getCurrentActivity().getWindowManager().getDefaultDisplay().getSize(deviceSize); int screenWidth = deviceSize.x; int screenHeight = deviceSize.y; int fromX = 0; int toX = screenWidth / 2; int fromY = screenHeight / 2; int toY = fromY; this.drag(fromX, toX, fromY, toY, 1); } 

我也使用android.support.v4.widget.DrawerLayout ,并没有find任何方法来做到这一点。

我终于设法打开抽屉使用代码波纹pipe

 /** * 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

打开抽屉导航: solo.clickOnScreen(50, 50);

在抽屉导航中select列表项目:

ListView listView = (ListView) solo.getView(R.id.left_drawer); View SwitchOrganizations = listView.getChildAt(0); solo.clickOnView(SwitchOrganizations);