使用导航抽屉的应用程序的Robotium UI测试

时间:2014-02-18 09:11:47

标签: android robotium navigation-drawer

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

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

我已经尝试通过此问题解答Navigation Drawer来修复Why does DrawerLayout sometimes glitch upon opening?

它帮助和随机冻结从90%减少到大约10%,但10%的测试运行可能会失败,这非常糟糕,特别是对于持续集成......

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

3 个答案:

答案 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);