2012-03-16 63 views
2

我试图为我的应用程序实现自动化测试。TouchUtils.clickView()在单元测试中的SlidingDrawer按钮上不起作用

我有滑动抽屉在视图中打开时触摸,里面是一个按钮。 我想要做的就是触摸滑动抽屉打开它,触摸里面的按钮并关闭滑动抽屉再次触摸它。

这是一件我的测试代码( ActivityInstrumentationTestCase2

ToggleButton insideBtn = (ToggleButton) mActivity.findViewById(R.id.sliding_btn); 
Button drawerBtn = (Button) mActivity.findViewById(R.id.drawer_btn); 
TouchUtils.tapView(this,drawerBtn); 
TouchUtils.tapView(this, insideBtn); 
TouchUtils.tapView(this, drawerBtn); 
...some assertion ... 

我发现这段代码有时工作,有时没有。问题在于抽屉没有打开后导致 insideBtn无法触摸。

所以,我想这个代码:

ToggleButton insideBtn = (ToggleButton) mActivity.findViewById(R.id.sliding_btn); 
Button drawerBtn = (Button) mActivity.findViewById(R.id.drawer_btn); 
SlidingDrawer drawer = (SlidingDrawer) mActivity.findViewById(R.id.drawer); 
while(!drawer.isOpened()) { 
    TouchUtils.tapView(this,drawerBtn); 
} 
TouchUtils.tapView(this, insideBtn); 
TouchUtils.tapView(this, drawerBtn); 
...some assertion ... 

但结果是,有时当测试工作在它第一次工作所以不需要循环。但是,当它不工作循环正在工作,直到无限 - 没有触摸导致抽屉被打开。

你有什么想法如何写这个测试工作可靠吗?

+0

我以为这可能是同步问题,所以我试着在触摸代码后面加上_mInstrumentation.waitForIdleSync()_。没有效果。 – Michal 2012-03-16 17:46:21

回答

1

我找到了解决方案。错误是用于打开SlidingDrawer的事件的错误选择。

Android的文档称,SlidingDrawer是两个孩子的意见组成的组件:手柄,使用户拖动 ...

因此,有必要使用TouchUtils.dragView()方法而不是TouchUtils.tapView()

这里是一个工作示例:

ToggleButton insideBtn = (ToggleButton) mActivity.findViewById(R.id.sliding_btn); 
Button drawerBtn = (Button) mActivity.findViewById(R.id.drawer_btn); 
TouchUtils.dragViewToTop(this,drawerBtn); 
TouchUtils.tapView(this, insideBtn); 
TouchUtils.dragViewToBottom(this,mActivity,drawerBtn); 
...Some assertion...