2015-12-08 16 views
1

我試圖找到一種方法來驗證活動是否完成加載所有內容,而不是在應用程序代碼中進行任何更改。在this question和其他許多其他提到的方法需要一些應用程序代碼的變化,我想通過androidTest部分來做到這一點。檢查一個活動是否已完成加載所有數據而不更改應用程序代碼

有場景時活性不完全加載並運行下面的代碼失敗:

onView(allOf(withId(R.id.user_name), withText("username1"))).perform(click()); 

在這個例子中我在等待一個ListView加載,所以數據也可被異步加載(I我使用濃咖啡)。

回答

1

可能爲時已晚,但您應該查看一下espresso閒置資源,以將您的背景加載任務與espresso同步。您不需要更改任何應用程序代碼。在這裏,你必須在Android定製空轉資源更深入的瞭解:http://dev.jimdo.com/2014/05/09/wait-for-it-a-deep-dive-into-espresso-s-idling-resources/ 或本http://blog.sqisland.com/2015/04/espresso-custom-idling-resource.html

這裏是我做的,使咖啡等待(從數據從網絡正在添加)運行UI測試之前填充我的名單。

public class ListResultsIdlingResource implements IdlingResource { 

private ResourceCallback callback; 

private RecyclerView mRecyclerListings; 


public ListResultsIdlingResource(RecyclerView recyclerListings) { 
    mRecyclerListings = recyclerListings; 
} 

@Override 
public boolean isIdleNow() { 
    if (mRecyclerListings != null && mRecyclerListings.getAdapter().getItemCount() > 0) { 
     if (callback != null) { 
      callback.onTransitionToIdle(); 
     } 
     return true; 
    } 
    return false; 
} 


@Override 
public void registerIdleTransitionCallback(ResourceCallback callback) { 
    this.callback = callback; 
} 

@Override 
public String getName() { 
    return "Recycler idling resource"; 
} 

你一定要檢查您的列表中有你isIdleNow()方法的項目在其元件上運行的UI測試之前。

然後在您的設置方法的espresso測試類中註冊空閒資源,並將它傳遞給您的ListView或Recyclerview或您用作列表的任何視圖的引用。

@Before 
public void setUp() throws Exception { 

    Intent intent = createIntentForActivity(); 
    activityRule.launchActivity(intent); 
    mActivity = activityRule.getActivity(); 

    mListResultsIdlingResource = new ListingResultsIdlingResource(
      (RecyclerView) mActivity.findViewById(R.id.recycler_view)); 
    registerIdlingResources(mListResultsIdlingResource); 
} 

希望這對任何尋找此問題的人都有幫助。

相關問題