Android Espresso:等待Activity完成/启动

14

在使用Espresso等待特定Activity完成或启动方面,是否有可靠的解决方案?

我有一个SplashActivity会出现几秒钟,然后是MainActivity。我希望Espresso与MainActivity交互,而不是SplashActivity,但我似乎找不到任何关于等待这种条件的信息。

我能找到的最接近的解决方案是关于idle resources的提及,但我不清楚如何在此处使用它来等待Activity。

1个回答

6

我猜测你的启动画面正在进行一些初始化操作。

如果是这种情况,我的建议是定义某种监听器模式,以便在初始化完成时能够获取回调。然后,您可以使用IdlingResource让Espresso等待初始化。

NB:以下不是完整的代码,但旨在为您提供如何执行此操作的提示:

public class SplashIdlingResource implements IdlingResource, YourApplicationInitListener {

    // volatile because can be set by a different
    // thread than the test runner: the one calling back
    private volatile boolean mIsInitialized;

    private ResourceCallback mCallback;

    public SplashIdlingResource() {
        YourApplication application = // retrieve your Application object
        mIsInitialized = application.isInitialized();
        if (!mIsInitialized) {
            application.addInitListener(this);
        }
    }

    @Override
    public String getName() {
        return SplashIdlingResource.class.getName();
    }

    @Override
    public boolean isIdleNow() {
        return mIsInitialized;
    }

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

    @Override
    public void onApplicationInitCompleted() {
        m_isInitialized = true;
        if (m_callback != null) {
            m_callback.onTransitionToIdle();
        }
    }
}

onApplicationInitCompleted()是您定义的回调函数,在Splash Activity完成初始化后必须调用该函数。

最后,在测试设置中通过调用Espresso.registerIdlingResource来注册这个新的IdlingResource。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接