gpt4 book ai didi

android - TouchUtils.clickView() 在单元测试中不适用于 SlidingDrawer 按钮

转载 作者:行者123 更新时间:2023-11-29 02:06:34 24 4
gpt4 key购买 nike

我正在尝试为我的应用实现自动化测试。

我在 View 中有滑动抽屉,触摸时会打开,里面是一个按钮。我想做的是触摸滑动抽屉将其打开,触摸里面的按钮并再次触摸它关闭滑动抽屉。

这是我的测试代码(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 ...

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

您对如何编写此测试以可靠地工作有任何想法吗?

最佳答案

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

Android 文档说 SlidingDrawer 是一个组件由两个 subview 组成: handle ,用户拖动...

因此需要使用 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...

关于android - TouchUtils.clickView() 在单元测试中不适用于 SlidingDrawer 按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9742044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com