我正在尝试找到一种方法来验证 Activity 是否已完成加载所有内容,而无需对应用程序代码进行任何更改。 this question中提到的方法还有许多其他需要更改一些应用程序代码,我想通过 androidTest 部分来完成。
在某些情况下, Activity 未完全加载并且运行以下代码失败:
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
这是我在运行 UI 测试之前所做的,让 espresso 等待我的列表被填充(来自网络的数据)。
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 或您用作列表的任何 View 。
@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);
}
希望这对寻找此内容的人有所帮助。
关于android - 检查 Activity 是否已完成加载所有数据而不更改应用程序代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34162150/