2016-08-16 20 views
6

android.support.v7.preference.ListPreferenceダイアログを開き、オプションを選択してNavDrawerを開き、ドロワーからアイテムを選択するテストがあります。Androidのエスプレッソで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; 
} 
関連する問題