Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example.app.tests;
- import android.support.test.espresso.IdlingResource;
- import android.support.test.espresso.ViewFinder;
- import android.support.test.espresso.ViewInteraction;
- import android.util.Log;
- import android.view.View;
- import java.lang.reflect.Field;
- import static android.support.test.espresso.Espresso.onView;
- import static android.support.test.espresso.matcher.ViewMatchers.withId;
- /**
- * An implementation of {@link IdlingResource} that is idle until view (provided by viewId) is visible.
- */
- public class IdleUntilVisibleIdlingResource implements IdlingResource {
- private static final String TAG = IdleUntilVisibleIdlingResource.class.getSimpleName();
- private ResourceCallback resourceCallback;
- private final int viewId;
- public IdleUntilVisibleIdlingResource(int viewId) {
- this.viewId = viewId;
- }
- @Override
- public String getName() {
- return TAG;
- }
- @Override
- public boolean isIdleNow() {
- // i don't know what activity is current, so I can't just call findViewById()
- View viewOfInterest;
- try {
- Field field = ViewInteraction.class.getDeclaredField("viewFinder");
- field.setAccessible(true);
- ViewInteraction viewInteraction = onView(withId(viewId));
- ViewFinder viewFinder = (ViewFinder) field.get(viewInteraction);
- viewOfInterest = viewFinder.getView();
- } catch (IllegalAccessException | NoSuchFieldException e) {
- Log.e(TAG, "Reflection failed", e);
- // if reflection fails, just return false and eventually we'll hit our IdlingPolicy timeout
- return false;
- }
- boolean isIdle = viewOfInterest != null && viewOfInterest.getVisibility() == View.VISIBLE;
- if (isIdle) {
- resourceCallback.onTransitionToIdle();
- }
- return isIdle;
- }
- @Override
- public void registerIdleTransitionCallback(ResourceCallback callback) {
- resourceCallback = callback;
- }
- }
Add Comment
Please, Sign In to add comment