[android-espresso] match (not (isDisplayed ()))가 NoMatchingViewException으로 실패합니다.

UI보기가 없는지 테스트하려고합니다. 보기 선택기는 다음과 같습니다.

public static ViewInteraction onMyTestUi() {
    return onView(withId(R.id.myTestId));
}

선택기는보기가 표시되는지 확인하는 데 문제가 없지만보기가 표시되지 않는 경우 오류를 표시합니다. 다음과 같이 사용하고 있습니다.

 onMyTestUi().check(matches(not(isDisplayed())));

하지만 다음과 같은 오류가 발생합니다.

com.google.android.apps.common.testing.ui.espresso.NoMatchingViewException : 일치하는 계층 구조의보기 없음 : ID 포함 : is 대상보기가보기 계층 구조의 일부가 아닌 경우 Espresso.onData를 사용하여 다음 AdapterViews : android.widget.ListView {…} 중 하나에서로드합니다.

이건 이상해. UI가 없는지 확인 중이며이 뷰를 찾을 수 없을 것으로 예상됩니다. 그렇다면 Espresso에서 오류가 발생하는 이유는 무엇입니까? 여기서 무엇이 잘못 될 수 있는지 제안하십시오.

감사합니다, 놀랐습니다!



답변

doesNotExist()대신 사용해야 합니다. 여기 에서 찾았 습니다 .

뷰가 뷰 계층 구조에 있지만 보이지 않는 상태 인 경우 (visibility가 ‘INVISIBLE’로 설정 됨) not(isDisplayed). 그러나 뷰가 뷰 계층 구조에 전혀 없으면 (예 : 가시성이 ‘GONE’으로 설정 됨) doesNotExist()사용됩니다.


답변

또한 귀하의 방법으로 작업하지만 다음과 같습니다.

onView(withId(R.id.next)).check(matches(not(isDisplayed())));


답변

onView(withText("")).check(doesNotExist());


답변

View보이지 않거나 존재하지 않는지 확인하려는 경우 .

public static ViewAssertion isNotDisplayed() {
    return new ViewAssertion() {
        @Override
        public void check(View view, NoMatchingViewException noView) {
            if (view != null && isDisplayed().matches(view)) {
                throw new AssertionError("View is present in the hierarchy and Displayed: "
                        + HumanReadables.describe(view));
            }
        }
    };
}

용법:

onView(withId(R.id.someView)).check(isNotDisplayed());


답변

“withEffectiveVisibility”보기 가시성을 확인하면이 옵션을 시도 할 수 있습니다.

    onViewWithId(R.id.YOURVIEW).check(matches(ViewMatchers.withEffectiveVisibility(ViewMatchers.Visibility.GONE)))


답변