android - 检查 Activity 是否已完成加载所有数据而不更改应用程序代码

标签 android listview asynchronous

我正在尝试找到一种方法来验证 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/

相关文章:

android - Visual Studio Cordova 工具,错误文件中的设备调试断点

android - 在 android studio 中找不到 proguard-project.txt

java - ListView 过滤器 : IllegalStateException

java - 安卓 : How to create a jagged array dynamically taking values from the database

javascript - 在 componentDidMount() 中获取地理位置并发送 Ajax 请求

javascript - 将多个 promise 传递给 $q.all 无效。

android - ToolBar 与包含 fragment 的内容(LinearLayout)重叠

如果 WiFi 关闭,Android 的 network_provider locationprovider 永远不会返回任何内容?

Jquery Mobile ListView 禁用画外音

javascript - 淡入完成后淡出后异步/等待超时