Question

I have to fight some flaky tests and am stuck at one exception I sometimes get with robotium

Caused by: java.lang.NullPointerException
at com.jayway.android.robotium.solo.ViewFetcher.getTopParent(ViewFetcher.java:44)
at com.jayway.android.robotium.solo.PublicViewFetcher.getTopParent(PublicViewFetcher.java:6)
at com.jayway.android.robotium.solo.ViewFetcher.getTopParent(ViewFetcher.java:46)
at com.jayway.android.robotium.solo.PublicViewFetcher.getTopParent(PublicViewFetcher.java:6)
at com.jayway.android.robotium.solo.ViewFetcher.getTopParent(ViewFetcher.java:46)
at com.jayway.android.robotium.solo.PublicViewFetcher.getTopParent(PublicViewFetcher.java:6)
at com.jayway.android.robotium.solo.ViewFetcher.getTopParent(ViewFetcher.java:46)
at com.jayway.android.robotium.solo.PublicViewFetcher.getTopParent(PublicViewFetcher.java:6)
at com.jayway.android.robotium.solo.ViewFetcher.getTopParent(ViewFetcher.java:46)
at com.jayway.android.robotium.solo.PublicViewFetcher.getTopParent(PublicViewFetcher.java:6)
at com.jayway.android.robotium.solo.ViewFetcher.getTopParent(ViewFetcher.java:46)
at com.jayway.android.robotium.solo.PublicViewFetcher.getTopParent(PublicViewFetcher.java:6)
at com.jayway.android.robotium.solo.ViewFetcher.getTopParent(ViewFetcher.java:46)
at com.jayway.android.robotium.solo.PublicViewFetcher.getTopParent(PublicViewFetcher.java:6)
at com.jayway.android.robotium.solo.ViewFetcher.getTopParent(ViewFetcher.java:46)
at com.jayway.android.robotium.solo.PublicViewFetcher.getTopParent(PublicViewFetcher.java:6)
at query.Query.rootViews(Query.java:113)
at query.Query.executeQuery(Query.java:29)

this is the getTopParent method from robotium:

/**
 * Returns the absolute top parent {@code View} in for a given {@code View}.
 *
 * @param view the {@code View} whose top parent is requested
 * @return the top parent {@code View}
 */

public View getTopParent(View view) {
    if (view.getParent() != null // line 44
            && view.getParent() instanceof android.view.View) {
        return getTopParent((View) view.getParent()); // line 46
    } else {
        return view;
    }
}

as far as I see this would mean that view.getParent() changes between the null-check and the recursive call from a view to null? I could imagine making a pull request to robotium changing the getTopParent to:

/**
 * Returns the absolute top parent {@code View} in for a given {@code View}.
 *
 * @param view the {@code View} whose top parent is requested
 * @return the top parent {@code View}
 */

public View getTopParent(View view) {
            final ViewParent parent = view.getParent();
    if (parent != null && parent instanceof android.view.View) {
        return getTopParent((View) parent);
    } else {
        return view;
    }
}

but I would like to have some more opinions before this.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top