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.
- NestedScrollView no se desplazará hasta el final cuando se utiliza con CollapsingToolbarLayout
- Webview dentro de NestedScrollView causa problema de altura
- NestedScrollView y WebView
- RecyclerView no recicla vistas cuando lo usa dentro de NestedScrollView
- RecyclerView dentro de NestedScrollView onBindViewHolder llamando para todo el tamaño getItemCount
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.
- Cómo poner RecyclerView dentro de NestedScrollView?
- NestedScrollView fling detener el error en Nougat (API 25)
- Recylerview no visible dentro de scrollview o nestedScrollview
- FrameLayout no coincide con altura de NestedScrollView
- Emita el desplazamiento WebView en NestedScrollView Android 2.3 o menos
- Ocultar un botón de acción flotante de otro diseño
- Cómo puedo crear un diseño nestedScroll como este?
- Recycler view + Ver Pager + Nailed ScrollView + CoordinatorLayout
Puede utilizar el nuevo grabador de prueba Espresso para obtener el código de desplazamiento anidado para – echa un vistazo a Espresso Test Recorder
- No se puede crear la versión firmada después de actualizar la versión de android en Córdoba
- TypeError: undefined no es una función (evaluando 'remoteModules.forEach')