2016-08-16 16 views
6

Tôi có một thử nghiệm cần mở hộp thoại android.support.v7.preference.ListPreference, chọn một tùy chọn, mở Trình hướng dẫn và chọn một mục từ ngăn kéo.Android Espresso không chờ giao diện người dùng hoàn tất

Hộp thoại được định nghĩa như thế này:

<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" /> 

Espresso mở nó như thế này:

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

này mở ListPreference, nhưng nó không chặn và dòng tiếp theo trong các thử nghiệm chạy ngay lập tức.

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

Vì điều đó xảy ra ngay lập tức, hộp thoại chưa xuất hiện và withText (VALUE_IN_LIST_PREFERENCE) không khớp với nội dung nào.

Nếu tôi bước qua với trình gỡ lỗi, tạm dừng trên dòng ở trên, hộp thoại sẽ xuất hiện đúng lúc và mã sẽ hoạt động.

Sự cố tương tự xảy ra với ngăn điều hướng. Nó mở ra như thế này:

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

Và một mục được nhấp vào:

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

Như với ListPreferences, mã kiểm tra tiếp tục mà không cần chờ cho giao diện người dùng để kết thúc và do đó cuộc gọi đến OnView thất bại.

Tôi đã thử đặt chủ đề đến ngủ và sau câu trả lời ở đây https://stackoverflow.com/a/22563297/4950621

Trong cả hai trường hợp, tuy nhiên hộp thoại không xuất hiện cho đến khi chủ đề được thực hiện ngủ và kiểm tra xem chạy ngay lập tức. Vì vậy, vấn đề chỉ đơn thuần là trì hoãn, không được giải quyết.

Làm cách nào để đảm bảo rằng các kiểm tra Espresso không chạy cho đến khi các Chế độ xem cần thiết hiển thị?

Trả lời

0

Nếu bạn chưa tìm thấy giải pháp, giải pháp được cung cấp tại đây có thể giúp bạn.

Wait until view become visible with IdleResource

Giải pháp là để thực hiện IdlingResource, mà sẽ cho phép bạn để cung cấp một callback được chạy càng sớm càng tất cả mọi thứ không trở nên nhàn rỗi.

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

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

    return mIdle; 
} 
Các vấn đề liên quan