Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Espresso: Cómo hacer swipe personalizado, por ejemplo, swipeTop o swipeBottom

Hasta ahora podemos hacer:

  • deslizar a la izquierda
  • desliza a la derecha
  • muévase hacia arriba
  • deslizar hacia abajo

¿Cómo podemos swipeTop (todo el camino a la parte superior) o swipeBottom (todo el camino hasta la parte inferior) es expresso. Por favor, dame un ejemplo si estos métodos ya existen.

  • Cómo instruir a los usuarios a denunciar un error en Android
  • ADB no reconoce mi Galaxy Nexus - Win7
  • La API de ubicación más precisa de Android
  • Android: ejecuta un método periódicamente mediante la llamada postDelayed ()
  • System.getProperty ("line.separator") Vs "\ n" para Android
  • Mensaje incorrecto con el permiso GET_ACCOUNTS
  • Credenciales de Webservice - OpenID / Android AccountManager?
  • ¿Cómo mostrar ProgressDialog a través de lanzar una nueva Actividad?
  • ¿Cómo obtener el ID o url de facebook de un contacto de los contactos nativos / resolución de contenidos?
  • El archivo original 'AndroidManifest.xml' ha sido eliminado o no es accesible
  • RecyclerView ViewPager java.lang.NullPointerException android.support.v7.widget.RecyclerView $ ItemAnimator $ ItemHolderInfo.left
  • Transferencia de datos desde USB (prolífico) a dispositivo Android
  • 5 Solutions collect form web for “Espresso: Cómo hacer swipe personalizado, por ejemplo, swipeTop o swipeBottom”

    ¿Has probado una GeneralSwipeAction así?

     private static ViewAction swipeFromTopToBottom() { return new GeneralSwipeAction(Swipe.FAST, GeneralLocation.TOP_CENTER, GeneralLocation.BOTTOM_CENTER, Press.FINGER); } 

    Tal vez usted tiene que proporcionar una implementación personalizada para el segundo y / o tercer parámetro, como Anna ya mencionó:

     new CoordinatesProvider() { @Override public float[] calculateCoordinates(View view) { float[] coordinates = GeneralLocation.CENTER.calculateCoordinates(view); coordinates[1] = 0; return coordinates; } } 

    Creo que podría hacerse escribiendo ViewActions complejas realizando un golpe.

     public static ViewAction swipeToTop() { return new MySwipeAction(Swipe.FAST, GeneralLocation.CENTER, new CoordinatesProvider() { @Override public float[] calculateCoordinates(View view) { float[] coordinates = GeneralLocation.CENTER.calculateCoordinates(view); coordinates[1] = 0; return coordinates; } }, Press.FINGER); } public static ViewAction swipeToBottom() { return new MySwipeAction(Swipe.FAST, GeneralLocation.CENTER, new CoordinatesProvider() { @Override public float[] calculateCoordinates(View view) { float[] coordinates = GeneralLocation.CENTER.calculateCoordinates(view); coordinates[1] = view.getContext().getResources().getDisplayMetrics().heightPixels; return coordinates; } }, Press.FINGER); } 

    Donde MySwipeAction podría ser algo como esto:

     public class MySwipeAction implements ViewAction { public MySwipeAction(Swiper swiper, CoordinatesProvider startCoordProvide, CoordinatesProvider endCoordProvide, PrecisionDescriber precDesc) { // store here in class variables to use in perform ... } @Override public Matcher<View> getConstraints() {...} @Override public String getDescription() {...} @Override public void perform(UiController uiController, View view) { ... float[] startCoord = startCoordProvide.calculateCoordinates(view); float[] finalCoord = endCoordProvide.calculateCoordinates(view); float[] precision = precDesc.describePrecision(); Swiper.Status status = Swiper.Status.FAILURE; // you could try this for several times until Swiper.Status is achieved or try count is reached try { status = m_swiper.sendSwipe(uiController, startCoord, finalCoord, precision); } catch (RuntimeException re) { ... } // ensures that the swipe has been run. uiController.loopMainThreadForAtLeast(ViewConfiguration.getPressedStateDuration()); } } 

    Espero que esto pueda ayudarte.

    @testsingh creo que no hay un método fuera de la caja para hacer el "swipeTop" o "swipeBottom" después de bucle, tal vez la forma más fácil (dumbest) que trabajó para mí XDDD

    // swipeUp 100 veces, viceversa para swipeDown

     for(int i=0;i<=100;i++){ onView(withText("label")).perform(swipeUp()); } 

    Por ejemplo, si utiliza recyclerView en su aplicación, puede utilizar algo como esto:

     Espresso.onView(ViewMatchers.withId(R.id.recyclerView)).perform(ViewActions.swipeUp()) 

    o

     Espresso.onView(ViewMatchers.withId(R.id.recyclerView)).perform(ViewActions.swipeDown()) 

    Sé que estoy tarde a la fiesta, pero después de un poco de finagling finalmente encontré algo que puede deslizar de arriba a abajo, de izquierda a derecha, etc – sin necesidad de ningún id de recursos.

    La razón por la que lo necesitaba era para una vista dinámicamente poblada donde todo era completamente ambiguo. Con el método de abajo puedo desplazarme hasta el final hasta el fondo e incluso cambiar el retardo para desplazar hacia abajo una sola página.

     static void swiper(int start, int end, int delay) { long downTime = SystemClock.uptimeMillis(); long eventTime = SystemClock.uptimeMillis(); Instrumentation inst = getInstrumentation(); MotionEvent event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, 500, start, 0); inst.sendPointerSync(event); eventTime = SystemClock.uptimeMillis() + delay; event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_MOVE, 500, end, 0); inst.sendPointerSync(event); event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, 500, end, 0); inst.sendPointerSync(event); SystemClock.sleep(2000); //The wait is important to scroll } 

    No necesito izquierda a derecha, etc. así que hardcoded los 500 adentro allí (500 que es el eje de x).

    Y para llamarlos lo hice Yo hice esto –

      // This swipes all the way to the bottom of the screen public static void swipeToBottom(){ swiper(1000, 100, 0) } // This scrolls down one page at a time public static void scrollSlowlyDown(){ swiper(775, 100, 100); } // This swipes to the top public static void swipeToTop(){ swiper(100, 1000, 0); } // This scrolls up one page at a time public static void scrollSlowlyUp(){ swiper(100, 775, 100); } 

    Espero que esto ayude a cualquiera que tropiece con esto.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.