Espresso withText in der TextView passt nicht zum ausgewählten Ansicht

Ich bin mit einer ungeraden test-Fehler mit Espresso. Der folgende test ist ein TextView in einem Dialog angezeigt. Ich bekomme die folgende Fehlermeldung:

   com.google.android.apps.common.testing.ui.espresso.base.DefaultFailureHandler$AssertionFailedWithCauseError: 'with string from resource id: <2131099772>' doesn't match the selected view.
Expected: with string from resource id: <2131099772>[my_content] value: Test Content Available
Got: "TextView{id=2131296340, res-name=dialog_content, visibility=VISIBLE, width=620, height=38, has-focus=false, has-focusable=false, 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, text=Test Content Available, input-type=0, ime-target=false}"

at dalvik.system.VMStack.getThreadStackTrace(Native Method)
at java.lang.Thread.getStackTrace(Thread.java:579)
at com.google.android.apps.common.testing.ui.espresso.base.DefaultFailureHandler.getUserFriendlyError(DefaultFailureHandler.java:69)
at com.google.android.apps.common.testing.ui.espresso.base.DefaultFailureHandler.handle(DefaultFailureHandler.java:40)
at com.google.android.apps.common.testing.ui.espresso.ViewInteraction.runSynchronouslyOnUiThread(ViewInteraction.java:159)
at com.google.android.apps.common.testing.ui.espresso.ViewInteraction.check(ViewInteraction.java:133)
at com.myapp.testContentDetails(FPATest.java:109)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:192)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
at com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner.onStart(GoogleInstrumentationTestRunner.java:167)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701)
Caused by: junit.framework.AssertionFailedError: 'with string from resource id: <2131099772>' doesn't match the selected view.
Expected: with string from resource id: <2131099772>[my_content] value: Test Content Available
Got: "TextView{id=2131296340, res-name=dialog_content, visibility=VISIBLE, width=620, height=38, has-focus=false, has-focusable=false, 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, text=Test Content Available, input-type=0, ime-target=false}"

at com.google.android.apps.common.testing.ui.espresso.matcher.ViewMatchers.assertThat(ViewMatchers.java:789)
at com.google.android.apps.common.testing.ui.espresso.assertion.ViewAssertions$2.check(ViewAssertions.java:76)
at com.google.android.apps.common.testing.ui.espresso.ViewInteraction$2.run(ViewInteraction.java:145)
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:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5081)
at java.lang.reflect.Method.invokeNative(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:781)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)

So klar, die Sicht ist gefunden, und es ist details, sehen Sie text= der Wert, den ich erwarte. Aber es sagt nicht mit dem übereinstimmt. Es ist die Ausführung mit der folgenden test-Anweisung

onView(withId(R.id.dialog_content)).check(
                matches(withText(R.string.my_content)));

Ich versuchte es mit der folgenden Anweisung als gut, bekam aber eine NoMatchingViewException, auch durch die Ansicht zeigt, in der ansichtshierarchie von der Ausnahme.

onView(withText(R.string.my_content)).check(
                matches(isDisplayed()));

Jede Hilfe, warum dieser scheitern würde? Seine erwähnenswert, ich bin in der Lage, withText() isDisplayed() auf einem Geschwister-Feld in das Dialogfeld ein.

  • Die built-in withText(int resourceId) das mit dem Espresso ist buggy. Es funktioniert nur, wenn der text geprüft wird, ist java.lang.String, sondern eine Menge von Texten verwendet wird, sind andere Unterklassen von CharSequence, wie "Bearbeitbar" oder " Spannable. Sicherstellen, dass die Art von text, den Sie comapring mit tatsächlich String, und wenn nicht schreiben Sie Ihre eigene matcher, die dem String entspricht, der Inhalt, ohne auf den Typ.
  • Perfekt! Ich hatte den text in die TextView mit einem Html.fromHtml(), was natürlich zur Folge, ein Übergreifendes Objekt. Schrieb einen benutzerdefinierten matcher, der hat gerade eine #toString() auf die textView.getText() in die #matchesSafely() und es funktioniert perfekt. Wenn Sie möchten, senden Sie dies als eine Antwort, werde ich markieren Sie es als akzeptiert, danke!
  • In meinem Fall war ich matching gegen alle Kappen text auf dem Bildschirm. Der eigentliche string in Kleinbuchstaben mit allCaps Eigenschaft gesetzt, so musste ich das match gegen Kleinbuchstaben.
InformationsquelleAutor JCricket | 2014-10-01
Schreibe einen Kommentar