Espresso - withEffectiveVisibility vs isDisplayed

Dan*_*ico 19 testing unit-testing junit4 android-espresso

什么是isDisplayedwithEffectiveVisibility?之间的区别?

onView(withText("Much Dagger")).check(matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)));


onView(withText("Much Dagger")).check(matches(ViewMatchers.isDisplayed());
Run Code Online (Sandbox Code Playgroud)

小智 24

根据文件

返回匹配{@link View}的匹配器,其中"有效"可见性设置为给定值.有效可见性不仅考虑了视图的可见性值,还考虑了其​​祖先的可见性值.在View.VISIBLE的情况下,这意味着视图及其所有祖先具有visibility = VISIBLE.在GONE和INVISIBLE的情况下,情况正好相反 - 任何GONE或INVISIBLE父母都会让其所有孩子都有其有效的知名度.

注意:

与名称所暗示的相反,视图可见性不会直接转化为视图是否显示在屏幕上(使用isDisplayed()).例如,视图及其所有祖先可以具有visibility = VISIBLE,但是视图可能需要滚动到以便实际对用户可见.除非您专门针对测试使用可见性值,否则请使用isDisplayed.

因此,如果用于验证视图是否可见,则使用isDisplayed()但是对于其他验证,如果不可见则使用withEffectiveVisibilty()