2016-09-12 50 views
5

W testach Android Ui, chcę, aby kliknąć na pozycji obrotowego, w oknie, ale pojawiają się z tego błędu:Android testowania: Czekaliśmy korzenia hierarchii widoku mieć aktywne okno

va.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{[email protected], [email protected], has-window-focus=false, layout-params-type=1, layout-params-string=WM.LayoutParams{(0,0)(fillxfill) sim=#10 ty=1 fl=#81810100 pfl=0x8 wanim=0x1030461 surfaceInsets=Rect(0, 0 - 0, 0) mwfl=0x0}, decor-view-string=MultiPhoneDecorView{id=-1, visibility=VISIBLE, width=1600, height=2560, 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{[email protected], [email protected], has-window-focus=true, layout-params-type=1002, layout-params-string=WM.LayoutParams{(310,600)(722x480) gr=#10000033 sim=#1 ty=1002 fl=#1860200 fmt=-3 wanim=0x10302db surfaceInsets=Rect(0, 0 - 0, 0) mwfl=0x0}, decor-view-string=PopupViewContainer{id=-1, visibility=VISIBLE, width=722, height=480, 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{[email protected], window-token=andro[email protected], has-window-focus=false, layout-params-type=2, layout-params-string=WM.LayoutParams{(0,0)(wrapxwrap) gr=#11 sim=#20 ty=2 fl=#1800002 pfl=0x8 fmt=-3 wanim=0x1030462 surfaceInsets=Rect(0, 0 - 0, 0) mwfl=0x10}, decor-view-string=DecorView{id=-1, visibility=VISIBLE, width=1136, height=1058, 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{[email protected], [email protected], has-window-focus=false, layout-params-type=1, layout-params-string=WM.LayoutParams{(0,0)(fillxfill) sim=#10 ty=1 fl=#81810100 pfl=0x8 wanim=0x1030461 surfaceInsets=Rect(0, 0 - 0, 0) mwfl=0x0}, decor-view-string=MultiPhoneDecorView{id=-1, visibility=VISIBLE, width=1600, height=2560, 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) 
at android.support.test.espresso.ViewInteraction$1.run(ViewInteraction.java:120) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422) 
at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:145) 
at android.app.ActivityThread.main(ActivityThread.java:6117) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 

próbowałem

onData(allOf(is(instanceOf(String.class)),containsString("A4"))).inRoot(isPlatformPopup()).perform(click()); 

i

onView(withText(containsString("A4"))).inRoot(isFocusable()).check(matches(isDisplayed())); 

i

onView(withText(containsString("A4"))).inRoot(withDecorView(not(getActivity().getWindow().getDecorView()))).check(matches(isDisplayed())); 

ale żaden z nich nie działa ... Czy ktoś może mi powiedzieć, jak zdobyć ralavant root?

Odpowiedz

1

Miałem ten sam błąd, gdy użyłem Spinner wewnątrz DialogFragment. To jest tylko kod, który pracował dla mnie:

onView(withText(containsString("A4"))).inRoot(isPlatformPopup()).check(matches(isDisplayed())); 
+0

To rozwiązany mój problem podczas używania Spinner wewnątrz 'AlertDialog'. –

1

Tylko w przypadku, gdy zdarza się czyjejkolwiek Travis kompilacji (z dokładnym tym samym dzienniku). Proszę sprawdzić this.

Miał dokładnie ten sam problem i został rozwiązany przez tworząc avd z niższą wersją docelową (19).

Co Próbowałem i nie działa:

  • Dodawanie unlockScreen()@Before metody do badania UI.

  • Dodawanie/usuwanie adb shell input keyevent 82 &.

  • Usuwanie różnych opcji poleceń -no-skin lub -no-audio lub -no-window. Teraz mam -no-window, który jest w porządku.

Wreszcie zmienia z

echo no | android create avd --force -n test -t android-24 --abi armeabi-v7a 

do

echo no | android create avd --force -n test -t android-19 --abi armeabi-v7a 

doskonale rozwiązać ten problem.

0

wystarczy zaktualizować narzędzia budować w travis.yml:

  • W tym pliku .travis.yml: trzeba mieć tę before_install: - echo yes | android update sdk --all --filter build-tools-26.0.1 --no-ui --force
  • jako wel to w .travis.yml:
script: echo no | android create avd --force -n test -t android-22 
--abi armeabi-v7a emulator -avd test -no-audio -no-window & 
android-wait-for-emulator 
adb shell settings put global window_animation_scale 0 & 
adb shell settings put global transition_animation_scale 0 & 
adb shell settings put global animator_duration_scale 0 & 
adb shell input keyevent 82 &