Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

RunTimeException in Android espresso when selecting spinner in dialog

I have an activity where some dialog is openend. On this dialog there is a spinner. I want to select a specific value in this spinner, but I get following exception:

java.lang.RuntimeException: Waited for the root of the view hierarchy to have window focus and not be requesting layout for over 10 seconds. If you specified a non default root matcher, it may be picking a root that never takes focus. Otherwise, something is seriously wrong. Selected Root:
Root{application-window-token=android.view.ViewRootImpl$W@7017bc1, window-token=android.view.ViewRootImpl$W@7017bc1, has-window-focus=false, layout-params-type=1, layout-params-string=WM.LayoutParams{(0,0)(fillxfill) sim=#3 ty=1 fl=#1810100 wanim=0x10303e5 needsMenuKey=2}, decor-view-string=DecorView{id=-1, visibility=VISIBLE, width=1280, height=752, has-focus=true, has-focusable=true, has-window-focus=false, is-clickable=false, is-enabled=true, is-focused=false, is-focusable=false, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-connection=false, x=0.0, y=0.0, child-count=1}}
.All Roots:
Root{application-window-token=android.view.ViewRootImpl$W@ae6d4cb, window-token=android.view.ViewRootImpl$W@920a4a8, has-window-focus=true, layout-params-type=1002, layout-params-string=WM.LayoutParams{(91,111)(509x113) gr=#10000033 sim=#1 ty=1002 fl=#1860200 fmt=-3 wanim=0x10302e3 surfaceInsets=Rect(0, 0 - 0, 0) (manual)}, decor-view-string=PopupDecorView{id=-1, visibility=VISIBLE, width=509, height=113, has-focus=true, has-focusable=true, has-window-focus=true, is-clickable=false, is-enabled=true, is-focused=false, is-focusable=false, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-connection=false, x=0.0, y=0.0, child-count=1}}
Root{application-window-token=android.view.ViewRootImpl$W@ae6d4cb, window-token=android.view.ViewRootImpl$W@ae6d4cb, has-window-focus=false, layout-params-type=2, layout-params-string=WM.LayoutParams{(0,0)(wrapxwrap) gr=#11 sim=#3 ty=2 fl=#1800002 fmt=-3 wanim=0x10303e6 needsMenuKey=2}, decor-view-string=DecorView{id=-1, visibility=VISIBLE, width=616, height=490, has-focus=true, has-focusable=true, has-window-focus=false, is-clickable=false, is-enabled=true, is-focused=false, is-focusable=false, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-connection=false, x=0.0, y=0.0, child-count=1}}
Root{application-window-token=android.view.ViewRootImpl$W@7017bc1, window-token=android.view.ViewRootImpl$W@7017bc1, has-window-focus=false, layout-params-type=1, layout-params-string=WM.LayoutParams{(0,0)(fillxfill) sim=#3 ty=1 fl=#1810100 wanim=0x10303e5 needsMenuKey=2}, decor-view-string=DecorView{id=-1, visibility=VISIBLE, width=1280, height=752, has-focus=true, has-focusable=true, has-window-focus=false, is-clickable=false, is-enabled=true, is-focused=false, is-focusable=false, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-connection=false, x=0.0, y=0.0, child-count=1}}
at android.support.test.espresso.base.RootViewPicker.get(RootViewPicker.java:99)
at android.support.test.espresso.ViewInteractionModule.provideRootView(ViewInteractionModule.java:69)
at android.support.test.espresso.ViewInteractionModule_ProvideRootViewFactory.get(ViewInteractionModule_ProvideRootViewFactory.java:23)
at android.support.test.espresso.ViewInteractionModule_ProvideRootViewFactory.get(ViewInteractionModule_ProvideRootViewFactory.java:9)
at android.support.test.espresso.base.ViewFinderImpl.getView(ViewFinderImpl.java:68) .....

My code:

 protected void selectSpinnerValue(int id, String value) {
    onView(withId(id)).perform(click());
    onData(allOf(is(instanceOf(String.class)), is(value))).perform(click());
}

The exception happens on the line onData(allOf....)

How can I tell espresso to look in the dialog?

like image 666
Peter Avatar asked Aug 12 '16 14:08

Peter


3 Answers

I had the same error when I tried to match an item inside a spinner inside a dialog-fragment. This helped:

onView(withText(value)).inRoot(isPlatformPopup()).perform(click());
like image 33
StefanTo Avatar answered Nov 05 '22 13:11

StefanTo


I had the same error when I tried to match a text inside an alert dialog. This helped:

onView(withText(text)).inRoot(RootMatchers.isDialog()).perform(click());
like image 147
Ricardo Simmus Avatar answered Nov 05 '22 14:11

Ricardo Simmus


Try this:

onData(allOf(is(instanceOf(String.class)), is(value)))
    .inRoot(isPlatformPopup()).perform(click());
like image 5
jeprubio Avatar answered Nov 05 '22 15:11

jeprubio