'view has effective visibility=VISIBLE' 与所选视图不匹配。浓缩咖啡错误

'view has effective visibility=VISIBLE' doesn't match the selected view. Espresso error

正在尝试验证是否显示了我的小吃店

通话中

onView(withText(R.string.checkout_device_error))
        .check(matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)))

由于调试器,一切正常,方法使其可见但测试失败

 'view has effective visibility=VISIBLE' doesn't match the selected view.
    Expected: view has effective visibility=VISIBLE
    Got: "MaterialTextView{id=2131362495, res-name=ribbon_text, visibility=VISIBLE, width=0, height=0, has-focus=false, has-focusable=false, has-window-focus=true, is-clickable=false, is-enabled=true, is-focused=false, is-focusable=false, is-layout-requested=true, is-selected=false, layout-params=android.widget.FrameLayout$LayoutParams@7c97dc7f, tag=null, root-is-layout-requested=false, has-input-connection=false, x=0.0, y=0.0, text=Invalid username and or password., input-type=0, ime-target=false, has-links=false}"

我不确定您遇到的具体故障是什么,因为您提到您在调试状态下收到的故障日志。但是,如果这是您遇到的错误,那么当您尝试断言时,捕获的是 checkout_device_error 字符串的容器 View not yet visible这是可见性。让我们看看你的日志 -

visibility=VISIBLE, width=0, height=0,  x=0.0, y=0.0

如果您看到,MaterialTextView 具有可见性 VISIBLE 但它是 height 并且 width0 并且 x y坐标也是0。这意味着在父容器中,MaterialTextView 具有可见性 VISIBLE。但是,父容器可能不可见。

我遇到了同样的问题,我在初始可见性 GONEConstraintLayout 中有一个可见性 VISIBLERatingBar。当我试图验证 RatingBar 的可见性时,它没有给出同样的错误。如果您的父视图在验证期间保持 INVISIBLE / GONE 状态,则不会发生这种情况,但如果父视图正在转换可见性状态并且您的验证调用同时发生,则会出现此问题。我通过延迟以正确完成父视图的转换然后启动可见性验证来解决此问题。我会建议您也这样做并延迟一些时间以使 Snackbar 完全显示。