如何在 Espresso 测试中点击 Snackbar 按钮?

9

我不认为这是一个重复的问题。我正在编写一个简单的Espresso测试,其中一部分涉及点击snackbar中的“确定”按钮。

Espresso.onView(allOf(withId(android.support.design.R.id.snackbar_text), withText(R.string.permission_snackbar)))
            .check(matches(isDisplayed()));
Espresso.onView(withText("Ok")).perform(click());

出现了以下错误:

android.support.test.espresso.PerformException: 在“文本为“Ok”的视图”上执行“单击”操作时出错。原因是:java.lang.RuntimeException:由于目标视图未满足以下一个或多个约束条件,因此不会执行操作:至少90%的视图区域对用户可见。目标视图:“AppCompatButton {id = 2131558552,res-name = snackbar_action,visibility = VISIBLE,width = 264,height = 144,has-focus = false,has-focusable = true,has-window-focus = true,is-clickable = true,is-enabled = true,is-focused = false,is-focusable = true,is-layout-requested = false,is-selected = false,root-is-layout-requested = false,has-input-connection = false,x = 684.0,y = 53.0,text = Ok,input-type = 0,ime-target = false,has-links = false}”

有什么想法吗?


我不相信这是一个重复的问题。当然,没有人会这样认为。如果你要解释为什么这不是一个重复的问题,请给出具体的原因,说明具体的现有问题没有回答你的问题;否则,就不要提起它。 - Nathan Tuggy
我遇到了差不多相同的问题,你是怎么解决的? - Christopher Francisco
2个回答

8
这里出现的RuntimeException错误信息是java.lang.RuntimeException: Action will not be performed because the target view does not match one or more of the following constraints: at least 90 percent of the view's area is displayed to the user.。实际上,这个问题来自于View未能完全显示。
这个问题是由竞争条件引起的。您正在尝试打开视图,在其打开期间尝试单击它。如果时机不对,那么少于90%的View将可用于Espresso框架的click()。按照Espresso设置说明中的建议,您可以通过禁用动画来解决此问题。
请按以下步骤操作:
  • 导航到手机的开发者选项
  • 设置以下内容
    • 窗口动画缩放=0.0x
    • 转换动画缩放=0.0x
    • 动画器持续时间缩放=0.0x
我的测试表明,您只需将转换动画缩放设置为0.0x即可摆脱这个竞争条件。正如您所想象的那样,这是一个完全一致的解决方案。

4

可以通过使用id snackbar_action 来简单地找到它:

onView(allOf(withId(android.support.design.R.id.snackbar_action)))
    .perform(click());

如果你仔细看一下 OP,你会发现匹配器起作用了。我的回答讨论了导致这个问题的竞态条件。 - OYRM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接