2016-08-16 12 views
6

को समाप्त करने के लिए यूआई की प्रतीक्षा नहीं कर रहा है मेरे पास एक परीक्षण है जिसे android.support.v7.preference.ListPreference संवाद खोलने की आवश्यकता है, एक विकल्प का चयन करें, NavDrawer खोलें और दराज से किसी आइटम का चयन करें।एंड्रॉइड एस्प्रेसो

संवाद इस तरह परिभाषित किया गया है:

<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) कुछ भी नहीं मेल खाता है।

यदि मैं उपरोक्त रेखा पर रुकने वाले डीबगर के साथ कदम उठाता हूं, तो संवाद समय में दिखाई देगा और कोड काम करेगा।

उसी समस्या तब एनएवी ड्रॉवर के साथ होती है। यह इस तरह से खोला है:

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

और एक आइटम पर क्लिक किया जाता है:

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

ListPreferences साथ के रूप में, परीक्षण कोड यूआई खत्म और इतने 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; 
} 
संबंधित मुद्दे