2016-08-16 3 views
6

android.support.v7.preference.ListPreference 대화 상자를 열고 필요한 옵션을 선택하고 NavDrawer를 열고 서랍에서 항목을 선택해야하는 테스트가 있습니다.Android Espresso UI 완료를 기다리지 않음

대화 상자는 다음과 같이 정의된다 :

<android.support.v7.preference.ListPreference 
    android:defaultValue="@string/pref_default_VALUE" 
    android:entries="@array/pref_VALUE_entries" 
    android:entryValues="@array/pref_VALUE_values" 
    android:key="@string/pref_key_VALUE" 
    android:negativeButtonText="@null" 
    android:positiveButtonText="@null" 
    android:title="@string/pref_title_VALUE" /> 

에스프레소가 이런 식으로 열립니다

onView(withText(mActivityRule.getActivity().getResources().getString(R.string.pref_title_VALUE)) 
    .perform(click()); 

이것은 ListPreference를 열고 않지만 차단하지 않고 시험에 다음의 행 즉시 실행됩니다.

// click on setting 
    onView(withText(VALUE_IN_LIST_PREFERENCE)) 
      .perform(click()); 

즉시 발생하므로 대화 상자가 나타나지 않고 withText (VALUE_IN_LIST_PREFERENCE)와 일치하지 않습니다.

디버거를 단계별로 실행하여 위의 행에서 일시 중지하면 대화 상자가 제 시간에 나타나고 코드가 작동합니다.

그런 다음 nav 서랍에서 같은 문제가 발생합니다. 그것은 다음과 같이 열 것 :

// open the nav drawer 
    onView(withId(R.id.drawer_layout)) 
      .perform(DrawerActions.open()); 

그리고 항목을 클릭 할 경우 : ListPreferences와 마찬가지로

// click on phase 1 
    onView(withId(R.id.nav_view)) 
      .perform(NavigationViewActions.navigateTo(R.id.nav_ITEM)); 

, 테스트 코드는 UI가 완료 등 onView에 대한 호출이 실패를 기다리지 않고 계속됩니다. 스레드가 자고 수행하고 뷰 테스트가 즉시 실행 때까지 내가 잠을 스레드를 넣고 두 경우 모두 여기 https://stackoverflow.com/a/22563297/4950621

답을 다음 시도

그러나 대화 상자가 표시되지 않습니다. 따라서 문제는 단순히 지연되고 해결되지는 않습니다.

필요한 뷰가 표시 될 때까지 에스프레소 테스트가 실행되지 않도록하려면 어떻게해야합니까?

답변

0

아직 해결 방법을 찾지 못한 경우 여기에 제공된 해결책을 사용하면 도움이 될 것입니다.

Wait until view become visible with IdleResource

이 솔루션은 즉시 모든 유휴 상태가 않는 실행되도록 당신이 콜백을 제공 할 수 IdlingResource을 구현하는 것입니다.

@Override 
public final boolean isIdleNow() { 
    mIdle = mIdle || mView.getVisibility() == mExpectedVisibility; 

    if (mIdle) { 
     if (mResourceCallback != null) { 
      mResourceCallback.onTransitionToIdle(); 
     } 
    } 

    return mIdle; 
} 
관련 문제