简体   繁体   中英

Android Espresso: Wait for Activity to finish/start

Is there a canonical solution using Espresso to wait for a specific Activity to finish or start?

I have a SplashActivity that appears for a few seconds, then a MainActivity. I want Espresso to interact with the MainActivity, not the SplashActivity, but I can't seem to find any information about waiting for such a condition.

The closest thing I can find is a mention of idle resources but its not clear to me how I would use that here to wait for the Activity.

I guess your splash activity is performing some initialization.

If this is the case, my suggestion is to define some sort of listener pattern in order to be able to get a callback when the initialization is done. Then, you can make Espresso wait for the initialization with an IdlingResource.

NB: The following is NOT complete code, but it is meant to give you a hint in how to do so:

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();
        }
    }
}

Where onApplicationInitCompleted() is the callback you defined and which must be called when the Splash Activity, and so the initialization, is done.

Finally, register this new IdlingResource with Espresso by calling Espresso.registerIdlingResource in test setup.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM