2016-09-12 47 views
5

を持っているビュー階層のルートを待っていた、私はダイアログでスピナーの項目をクリックしますが、それはこのエラーをポップアップ表示:Androidのテスト:アンドロイドのUIテストでウィンドウのフォーカス

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], [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) 

私は

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

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

を試してみました
onView(withText(containsString("A4"))).inRoot(withDecorView(not(getActivity().getWindow().getDecorView()))).check(matches(isDisplayed())); 

しかし、いずれも動作しません... 誰も私にralavantルートを取得する方法を教えてもらえますか?

答えて

1

DialogFragmentの中でSpinnerを使用したとき、同じエラーが発生しました。 これは私のために働いていたコードのみです:

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

.travis.ymlでこのWELとして、あなたはこのbefore_install: - echo yes | android update sdk --all --filter build-tools-26.0.1 --no-ui --force

  • を持つべきです私の問題は 'AlertDialog'の中でSpinnerを使うときです。 –

  • 1

    念のためにそれが(まったく同じログで)誰のトラヴィスのビルドに発生した場合。 thisを確認してください。

    全く同じ問題があり、によって解決され、より低いターゲットバージョン(19)でavdを作成しました。私が試したし、うまくいきませんでした何

    • UIテストにunlockScreen()@Beforeメソッドを追加します。

    • adb shell input keyevent 82 &の追加/削除。 emulator異なるコマンドオプション-no-skinまたは-no-audioまたは-no-windowを削除

    • 。今私は-no-windowがあります。

    最後に、

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

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

    から を変更すると、完全に問題を解決します。

    0

    だけtravis.ymlでビルドツールを更新します。このファイルで

    • .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 & 
    
    関連する問題