Espresso largo haga clic en el menú y el menú emergente
ACTUALIZACIÓN: parece que al usar la aplicación, en algunos momentos al azar, la aplicación se bloqueará cuando haga clic largo, especialmente en los elementos hacia la parte inferior de la pantalla. ¿Alguna idea de por qué podría ser?
Así que hay un listview en mi aplicación. Si hace clic largo en un elemento de vista de lista, aparecerá un menú emergente, anclado al elemento que ha seleccionado largamente, con opciones para eliminar o editar el elemento de menú. Sólo con la aplicación, todo funciona bien. Puede hacer clic en cualquier elemento de la lista, los datos asociados subyacentes se eliminan y la vista de lista se actualiza sin ese elemento que acaba de eliminar.
- ¿Cómo desplazarse por la pantalla en la prueba de espresso android? Necesito validar el texto presente en la pantalla
- Cómo probar los valores de TextInputLayout (sugerencia, error, etc.) usando Android Espresso?
- Prueba Espresso en un módulo separado
- La prueba de unidad que incluye un Toast en el código de producción falla
- Cómo escribir prueba funcional automatizada con Facebook SDK en la aplicación de Android?
Lo que estoy tratando de hacer : Espresso no le gusta mi lista de vista y hacer clic largo. Simplemente estoy tratando de probar que el menú emergente aparece, pero no puedo obtener espresso a longclick con éxito. Estoy pensando que el problema tiene algo que ver con el menú emergente. Así que para empezar, sólo estoy tratando de conseguir espresso a longclick sin molestarse en mí. Una vez que espresso longchicks con éxito, creo que puedo averiguar cómo comprobar si o no el popup se muestra.
Lo que he probado hasta ahora : He leído que apagar animaciones se supone que ayudar a espresso ser menos escamosa. Apagué todas las animaciones que pude y el problema persiste. Incluso puedo ver la prueba ejecutada en mi teléfono y ver que es longclicking el elemento de menú correcto, pero cuando el longclick está completo y el menú emergente debe aparecer, la prueba falla
Código : Esta es la línea de prueba de espresso que falla. He utilizado la misma línea de código antes, excepto con click()
y la aplicación hace lo que se supone que y espresso es feliz. MCourseCount es simplemente el índice del último elemento de la lista. Ese no es el problema. I y actualizar el mismo índice en varias otras pruebas y todo funciona bien.
onData(anything()).inAdapterView(withId(R.id.listview_class)) .atPosition(mCourseCount).perform(longClick());
En caso de fallo, existen un par de líneas interesantes en el seguimiento de la pila
android.support.test.espresso.PerformException: Error performing 'long click' on view ' displaying data matching: ANYTHING within adapter vieW matching: with id: com.cmsc355.classcompass.classcompass:id/listview_class'
Y más tarde
Caused by: java.lang.IllegalStateException: MenuPopupHelper cannot be used without an anchor at com.android.internal.view.menu.MenuPopupHelper.show(MenuPopupHelper.java:101) at android.widget.PopupMenu.show(PopupMenu.java:108)at com.cmsc355.classcompass.classcompass.CourseMenuFragment$2. onItemLongClick(CourseMenuFragment.java:91)
Este último bit del rastreo de la pila es confuso porque definitivamente he configurado el menú emergente con un ancla como sigue (esto es de CourseMenuFragment alrededor de la línea 91):
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, final View view, final int position, long id) { PopupMenu popupEdit = new PopupMenu(getActivity(), listView.getChildAt(position)); popupEdit.getMenuInflater().inflate(R.menu.course_longclick_popup, popupEdit.getMenu()); popupEdit.show(); popupEdit.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { if (item.getItemId() == R.id.edit_course) { } else if (item.getItemId() == R.id.delete_course) { throwCourseDeleteAlert(position); listView.setAdapter(mCourseNameAdapter); } return true; } }); return true; } });
En la línea en la que se listView.getChildAt(position)
primera instancia, listView.getChildAt(position)
define el ancla para el menú emergente. Tal vez hay un problema con esto? Pero como se mencionó, todo funciona completamente bien como se esperaba cuando sólo interactuar con el mí mismo.
Cualquier orientación sería apreciada. Por favor, hágamelo saber si es necesario aclarar más.
- GetActivity () causa RuntimeException: No se pudo iniciar intención Intent act = android.intent.action.MAIN
- Cómo probar el gesto de desplazamiento del buscapersonas en Android con Espresso 2.2
- ¿Es posible inhabilitar tostadas o esperar hasta que el tostado desaparezca mientras se prueba
- Uso de Espresso para hacer clic en la vista dentro del elemento RecyclerView
- Cómo establecer una calificación específica en RatingBar en Espresso?
- El recurso de ralentí Espresso no funciona
- Crear DummyActivity dentro de la carpeta androidTest para probar
- ¿Cómo podemos usar espresso para probar una actividad de configuración de Android con un PreferenceFragment?
Solución encontrada. Yo estaba accediendo a los elementos de la lista de forma incorrecta. En lugar de
PopupMenu popupEdit = new PopupMenu(getActivity(), listView.getChildAt(position));
Cambié a
PopupMenu popupEdit = new PopupMenu(getActivity(), listView.getChildAt(position - listView.getFirstVisiblePosition()));
Tuve que ajustar el índice de la posición para cuando fui desplazado hacia abajo más lejos en la lista. Me gusta odiar contestando mis propias preguntas sobre SO, pero tal vez esto ayudará a alguien más.
- El icono de la aplicación no aparece en la barra de acciones de Android
- ¿Cómo realizar un seguimiento de la instalación de referencias desde Android Market?