【发布时间】:2020-10-08 16:38:54
【问题描述】:
我正在使用 Espresso 进行一些简单的测试。其中之一是关于单击视图并检查是否显示对话框。
我的问题是有时有效,有时无效。只有当我在检查对话框之前放置一个 sleep 时,它才会始终有效。任何不使用 sleep 的解决方案?
这是我的代码(很简单):
onView(withId(R.id.forgot_password)).perform(click());
// only works if use Thread.sleep(ms) here
onView(withText(R.string.reset_password)).check(matches(isDisplayed()));
编辑:
我正在显示带有静态助手的对话框,但简化是这样的。而且我没有在中间执行任何后台任务。
最终的 TextInputDialog textInputDialog = new
TextInputDialog.Builder(context)
.setTitle(titleId)
.setInputType(inputType)
.setHint(hintId)
.setPreFilledText(preFilledText)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(positiveButtonId, onTextSubmittedListener)
.create();
textInputDialog.show(textInputDialog);
谢谢!
【问题讨论】:
-
我不明白为什么睡眠不是一个好的解决方案。您想等待一段时间,而这正是 sleep 的作用。
-
该点击事件是立即显示对话框,还是执行一些后台作业然后显示对话框?
-
thread.sleep 在 android espresso 测试中不是一个好的解决方案。通常它不应该是必要的,espresso 等到主线程完成 - 所以它应该等待对话框。你能分享一下你是如何显示对话框的吗?
-
我已经更新了我的答案。我只是检查一些变量和编辑文本并显示对话框。
-
您提供的代码看起来不错,因此错误必须在其他地方。也许在您确切调用对话框的位置和方式显示。如果测试失败,还有什么错误消息?它失败/成功的频率如何?