Prueba Espresso NestedScrollView – "Error al ejecutar 'desplazamiento a' en vista 'con id:"

Necesito desplácese abajo a través de mi NestedScrollView para probar mi archivo del xml con Espresso, pero consigo el mensaje de error: "Error que realiza" rueda a "en la visión" con el id: "

Varios otros puestos que parecen tener un problema similar.

He seguido las instrucciones de esto: Android espresso NestedScrollView, cómo desplazarse a la parte inferior

Ahora obtengo el error mencionado, y encontré esta publicación: Se intentó desplazar a la vista, pero la vista no se muestra

No tengo relleno en mi NestedScrollView – Incluso traté de quitar el relleno del XML alltogether, para propósitos de prueba, pero no hizo ninguna diferencia.

Esta es mi prueba (hasta ahora no se supone que haga nada, pero desplácese hacia abajo):

@Test public void testScrollDownAbilityOfDetailsScrollView(){ goToSpecificItemOnStream(streamItemWithOneImage); onView(withId(R.id.end_of_details)) .perform(ScrollToAction.betterScrollTo()); } 

Utiliza una clase personalizada de desplazamiento a la acción:

  public final class ScrollToAction implements ViewAction { private static final String TAG = ScrollToAction.class.getSimpleName(); @SuppressWarnings("unchecked") @Override public Matcher<View> getConstraints() { return allOf(withEffectiveVisibility(Visibility.VISIBLE), isDescendantOfA(anyOf( isAssignableFrom(ScrollView.class), isAssignableFrom(HorizontalScrollView.class), isAssignableFrom(NestedScrollView.class)))); } @Override public void perform(UiController uiController, View view) { if (isDisplayingAtLeast(80).matches(view)) { Log.i(TAG, "View is already displayed. Returning."); return; } Rect rect = new Rect(); view.getDrawingRect(rect); if (!view.requestRectangleOnScreen(rect, true /* immediate */)) { Log.w(TAG, "Scrolling to view was requested, but none of the parents scrolled."); } uiController.loopMainThreadUntilIdle(); if (!isDisplayingAtLeast(80).matches(view)) { throw new PerformException.Builder() .withActionDescription(this.getDescription()) .withViewDescription(HumanReadables.describe(view)) .withCause(new RuntimeException( "Scrolling to view was attempted, but the view is not displayed")) .build(); } } public static ViewAction betterScrollTo() { return ViewActions.actionWithAssertions(new ScrollToAction()); } @Override public String getDescription() { return "scroll to"; }} 

La clase ScrollToAction hecha a la medida existe porque el método scrollTo normal está codificado en modo duro para ScrollView y HorizontalScrollView, pero no NestedScrollView.

Este es el archivo XML que intento probar:

  <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/scrollView" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <FrameLayout android:id="@+id/fl" android:background="#FBFBFB" android:layout_margin="0dp" android:layout_width="match_parent" android:layout_height="350dp"> <android.support.v4.view.ViewPager android:id="@+id/container" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> <ImageView android:id="@+id/location" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="@dimen/text_margin" android:layout_gravity="left|top" android:background="@null" android:src="@drawable/ic_location_white" android:paddingLeft="-8dp" /> <TextView android:id="@+id/textViewDistance" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/location" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_margin="@dimen/text_margin" android:layout_gravity="left|top" android:shadowColor="#262424" android:shadowDx="1" android:shadowDy="1" android:shadowRadius="2" android:textColor="#FBFBFB" android:textSize="22dp" android:singleLine="false" android:paddingLeft="24dp" /> <TextView android:id="@+id/textViewPrice" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_margin="@dimen/text_margin" android:layout_gravity="right|top" android:shadowColor="#262424" android:shadowDx="1" android:shadowDy="1" android:shadowRadius="2" android:textColor="#FBFBFB" android:textSize="22dp"/> <me.relex.circleindicator.CircleIndicator android:id="@+id/indicator" android:layout_width="match_parent" android:layout_height="40dp" android:layout_gravity="bottom" android:shadowColor="#262424" android:shadowDx="1" android:shadowDy="1" android:shadowRadius="1"/> </FrameLayout> <LinearLayout android:layout_below="@id/fl" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textViewTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="left" android:layout_margin="@dimen/text_margin" android:textColor="@color/colorCheckTomBlack" android:textStyle="bold" android:textSize="20dp" /> <TextView android:id="@+id/textViewDescription" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/text_margin" android:layout_marginRight="@dimen/text_margin" android:gravity="left" android:textColor="@color/colorCheckTomBlack" android:textSize="18dp" android:layout_weight="0.56" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="65dp" android:paddingTop="30dp"> <ImageButton android:id="@+id/buttonWatchlist" android:src="@drawable/ic_checktom" android:background="@null" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="left" android:layout_marginLeft="55dp" android:layout_marginStart="55dp" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:onClick="launchWatchlistActivity" android:paddingTop="2dp"/> <ImageButton android:id="@+id/buttonMessage" android:src="@drawable/ic_messages" android:background="@null" android:scaleX="1.2" android:scaleY="1.2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:onClick="launchMessageActivity" android:paddingTop="7dp"/> <ImageButton android:id="@+id/buttonShare" android:src="@drawable/ic_share" android:background="@null" android:scaleX="1.5" android:scaleY="1.5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="54dp" android:layout_marginEnd="54dp" android:layout_alignParentTop="true" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:onClick="launchShareActivity"/> </RelativeLayout> <RelativeLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="2dp"> <TextView android:id="@+id/textViewWatchlist" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Watchlist" android:layout_marginLeft="41dp" android:layout_marginStart="41dp" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <TextView android:id="@+id/textViewMessage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Message" android:layout_gravity="center_horizontal" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" /> <TextView android:id="@+id/textViewShare" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Share" android:layout_gravity="center_horizontal" android:layout_alignParentTop="true" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:layout_marginRight="52dp" android:layout_marginEnd="52dp" /> </RelativeLayout> <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="_________________________________________" android:paddingTop="25dp"/> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"> <de.hdodenhof.circleimageview.CircleImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/imageView" android:layout_centerHorizontal="true" android:id="@+id/circleView" android:scaleX="0.4" android:scaleY="0.4" android:layout_marginTop="-20dp" android:layout_marginBottom="-60dp" /> </LinearLayout> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center"> <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"> <TextView android:id="@+id/textViewSellerName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18dp"/> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"> <TextView android:id="@+id/textViewSellerDestination" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingBottom="20dp" /> <TextView android:id="@+id/end_of_details" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> </LinearLayout> </LinearLayout> </RelativeLayout> </android.support.v4.widget.NestedScrollView> 

Cuando la prueba falla, ésta es la salida completa que consigo:

android.support.test.espresso.PerformException: Error al ejecutar 'desplazarse a' en vista 'con id: com.checktom.checktom: id / end_of_details'. en android.support.test.espresso.PerformException $ Builder.build (PerformException.java:83) en android.support.test.espresso.base.DefaultFailureHandler.getUserFriendlyError (DefaultFailureHandler.java:80) en android.support.test.espresso .base.DefaultFailureHandler.handle (DefaultFailureHandler.java:56) en android.support.test.espresso.ViewInteraction.runSynchronouslyOnUiThread (ViewInteraction.java:184) en android.support.test.espresso.ViewInteraction.doPerform (ViewInteraction.java:115 ) en android.support.test.espresso.ViewInteraction.perform (ViewInteraction.java:87) en com.checktom.checktom.ApplicationTest.testScrollDownAbilityOfDetailsScrollView (ApplicationTest.java:279) en java.lang.reflect.Method.invoke (Método nativo ) en java.lang.reflect.Method.invoke (Method.java:372) en org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall (FrameworkMethod.java:50) en org.junit.internal.runners.model.ReflectiveCallable .run (ReflectiveCallable.java:12) en org.junit.runners.model.FrameworkMethod.inv okeExplosively (FrameworkMethod.java:47) en org.junit.internal.runners.statements.InvokeMethod.evaluate (InvokeMethod.java:17) en org.junit.internal.runners.statements.RunBefores.evaluate (RunBefores.java:26) en android.support.test.internal.statement.UiThreadStatement.evaluate (UiThreadStatement.java:55) en android.support.test.rule.ActivityTestRule $ ActivityStatement.evaluate (ActivityTestRule.java:270) en org.junit.rules.RunRules .evaluate (RunRules.java:20) en org.junit.runners.ParentRunner.runLeaf (ParentRunner.java:325) en org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.java:78) en org.junit.runners. BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.java:57) en org.junit.runners.ParentRunner $ 3.run (ParentRunner.java:290) en org.junit.runners.ParentRunner $ 1.schedule (ParentRunner.java:71) en org.junit .runners.ParentRunner.runChildren (ParentRunner.java:288) en org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:58) en org.junit.runners.ParentRunner $ 2.evalu come (ParentRunner.java:268) en org.junit.runners.ParentRunner.run (ParentRunner.java:363) en org.junit.runners.Suite.runChild (Suite.java:128) en org.junit.runners.Suite .runChild (Suite.java:27) en org.junit.runners.ParentRunner $ 3.run (ParentRunner.java:290) en org.junit.runners.ParentRunner $ 1.schedule (ParentRunner.java:71) en org.junit. runners.ParentRunner.runChildren (ParentRunner.java:288) en org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:58) en org.junit.runners.ParentRunner $ 2.evaluate (ParentRunner.java:268) en org .junit.runners.ParentRunner.run (ParentRunner.java:363) en org.junit.runner.JUnitCore.run (JUnitCore.java:137) en org.junit.runner.JUnitCore.run (JUnitCore.java:115) en android.support.test.internal.runner.TestExecutor.execute (TestExecutor.java:59) en android.support.test.runner.AndroidJUnitRunner.onStart (AndroidJUnitRunner.java:262) en android.app.Instrumentation $ InstrumentationThread.run Instrumentation.java:1933) Causado por: java.lang.RuntimeException: Desplazamiento a se intentó ver, pero la vista no se muestra en com.checktom.checktom.ScrollToAction.perform (ScrollToAction.java:52) en android.support.test.espresso.ViewInteraction $ 1.run (ViewInteraction.java:144) en java. util.concurrent.Executors $ RunnableAdapter.call (Executors.java:422) en java.util.concurrent.FutureTask.run (FutureTask.java:237) en android.os.Handler.handleCallback (Handler.java:739) en android .os.Handler.dispatchMessage (Handler.java:95) en android.os.Looper.loop (Looper.java:145) en android.app.ActivityThread.main (ActivityThread.java:6938) en java.lang.reflect. Method.invoke (Método nativo) en java.lang.reflect.Method.invoke (Method.java:372) en com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1404) en com.android. internal.os.ZygoteInit.main (ZygoteInit.java:1199) Las pruebas se completaron.

Puedo decir que me ejecute en la excepción de tiempo de ejecución en el método de rendimiento de mi clase ScrollToAction, pero todavía tengo que encontrar una manera de resolverlo.

En el primer post que enlazé, el nuevo método BetterScrollTo parecía funcionar como un encanto.

Puede utilizar el nuevo grabador de prueba Espresso para obtener el código de desplazamiento anidado para – echa un vistazo a Espresso Test Recorder

  • Android - CoordinatorLayout / NestedScrollView / Hide-Show Toolbar / Problema con WebView
  • Vista de Scrollview anidada + Recycler
  • NestedScrollView y Horizontal RecyclerView Smooth Scrolling
  • NestedScrollView se desplaza hacia abajo cuando el contenido se llena
  • Match_parent no funciona para ListView, si ListView está dentro de NestedScrollView
  • Ocultar FAB en NestedScrollView al desplazarse
  • Cómo usar la barra de desplazamiento y rápido Desplácese a NestedScrollView
  • Habilitar scroll intertial en NestedScrollView (Android Studio)
  • ListView no se expande dentro de NestedScrollView
  • Cómo detectar la posición de la nestedscrollview de desplazamiento android en la parte inferior?
  • Fling suavemente AppBarLayout con NestedScrollView usando AppBarLayout.Behavior
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.