我正在尝试为我的应用程序实现自动化测试。
我在视图中有滑动抽屉,触摸时打开,里面是一个按钮。 我想做的是触摸滑动抽屉打开它,触摸按钮内部并关闭滑动抽屉再次接触它。
以下是我的测试代码( 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 :(得分:1)
我找到了解决方案。错误是用于打开SlidingDrawer的错误事件选择。
Android文档说SlidingDrawer是一个由两个子视图组成的组件:句柄,用户 DRAGS ...
因此需要使用 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...