检查活动是否已在不更改应用程序代码的情况下完成加载所有数据



我正试图找到一种方法来验证活动是否只完成了加载所有内容,而不对应用程序代码进行任何更改。这个问题和许多其他问题中提到的方法需要一些应用程序代码更改,我想通过androidTest部分来完成。

存在活动未完全加载并且运行以下代码失败的情况:

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

在本例中,我正在等待加载ListView,因此数据也可以异步加载(我使用的是espresso)。

可能为时已晚,但您应该查看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

以下是我所做的,让espresso在运行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";
}

在对其元素运行UI测试之前,您只需要检查isIdleNow()方法中的列表中是否有项目。

在设置方法中的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);
}

希望这对任何寻找这个的人都有帮助。

最新更新