web-dev-qa-db-ja.com

エスプレッソ-withEffectiveVisibilityvsisDisplayed

isDisplayedwithEffectiveVisibilityの違いは何ですか?

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


onView(withText("Much Dagger")).check(matches(ViewMatchers.isDisplayed());
19

ドキュメントによると

指定された値に「有効な」可視性が設定されている{@linkView}に一致するマッチャーを返します。効果的な可視性は、ビューの可視性の値だけでなく、その祖先の可視性の値も考慮に入れます。 View.VISIBLEの場合、これは、ビューとそのすべての祖先がvisibility = VISIBLEを持っていることを意味します。 GONEとINVISIBLEの場合は、その逆です。GONEまたはINVISIBLEの親は、すべての子に効果的な可視性を持たせます。

注意:

名前が意味するものとは異なり、ビューの可視性は、ビューが画面に表示されるかどうかに直接変換されません(そのためにはisDisplayed()を使用します)。たとえば、ビューとそのすべての祖先は、visibility = VISIBLEを持つことができますが、実際にユーザーに表示するには、ビューをスクロールする必要がある場合があります。テストで可視性の値を特にターゲットにしていない限り、isDisplayedを使用します。

したがって、ビューが表示されているかどうかの検証に使用する場合はisDisplayed()を使用しますが、非表示でなくなった場合のその他の検証にはwithEffectiveVisibilty()を使用します。

24
UDI