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

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

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

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

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

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

  • 我怎样才能并行运行独立的Robotium UItesting?
  • 使用Robotium检查片段的存在 - Android
  • 切换到AndroidJUnitRunner后,现有Android UItesting停止工作
  • 什么unit testing,在Android应用程序中
  • 我怎样才能用gradle android运行一个单独的testing
  • 如何旋转活动,我的意思是:使用Espresso改变屏幕方向?
  • 点击Robotium中的操作栏菜单项
  • Androidtesting原始资源
  • 我遇到了与我们的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);