我正试图找到一种方法来验证活动是否只完成了加载所有内容,而不对应用程序代码进行任何更改。这个问题和许多其他问题中提到的方法需要一些应用程序代码更改,我想通过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);
}
希望这对任何寻找这个的人都有帮助。