isDisplayed
とwithEffectiveVisibility
の違いは何ですか?
onView(withText("Much Dagger")).check(matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)));
onView(withText("Much Dagger")).check(matches(ViewMatchers.isDisplayed());
ドキュメントによると
指定された値に「有効な」可視性が設定されている{@linkView}に一致するマッチャーを返します。効果的な可視性は、ビューの可視性の値だけでなく、その祖先の可視性の値も考慮に入れます。 View.VISIBLEの場合、これは、ビューとそのすべての祖先がvisibility = VISIBLEを持っていることを意味します。 GONEとINVISIBLEの場合は、その逆です。GONEまたはINVISIBLEの親は、すべての子に効果的な可視性を持たせます。
注意:
名前が意味するものとは異なり、ビューの可視性は、ビューが画面に表示されるかどうかに直接変換されません(そのためにはisDisplayed()を使用します)。たとえば、ビューとそのすべての祖先は、visibility = VISIBLEを持つことができますが、実際にユーザーに表示するには、ビューをスクロールする必要がある場合があります。テストで可視性の値を特にターゲットにしていない限り、isDisplayedを使用します。
したがって、ビューが表示されているかどうかの検証に使用する場合はisDisplayed()を使用しますが、非表示でなくなった場合のその他の検証にはwithEffectiveVisibilty()を使用します。