9

我不相信这是一个愚蠢的问题。我正在编写一个简单的 Espresso 测试,其中一部分涉及单击快餐栏中的“确定”按钮。

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-连接=假,x=684.0,y=53.0,文本=确定,输入类型=0,ime-target=false,has-links=false}"

有任何想法吗?

4

2 回答 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 设置说明中的建议,通过禁用动画来解决问题

  • 导航到您的手机Developer Options
  • 设置以下
    • 窗口动画比例 = 0.0x
    • 过渡动画比例 = 0.0x
    • 动画师持续时间比例 = 0.0x

我自己的测试表明,您只需Transition Animation Scale0.0x. 正如您可以想象的那样,这是您遇到的竞争条件的完美一致的解决方案。

于 2016-02-24T17:00:33.650 回答
3

它可以简单地使用 id 找到snackbar_action

onView(allOf(withId(android.support.design.R.id.snackbar_action)))
    .perform(click());
于 2015-11-01T22:10:53.127 回答