Android UIAutomator Testing: Cuenta de todos los elementos presentes en la vista de lista
Mientras realizas pruebas de automatización de UI móvil con Android UIAutomator, necesito averiguar todos los elementos presentes en la vista de lista.
Mediante el uso del método 'getChildCount ()', como se muestra a continuación, estoy obteniendo el recuento de los elementos actualmente visibles solamente , pero hay más elementos presentes en la vista de lista pero son invisibles.
- Pruebas de Android: UIAutomator vs Espresso
- ¿Puede una aplicación Android controlar otra aplicación a través de UI Automator?
- Cómo obtener una instancia de android.app.UiAutomation
- ¿Cómo puedo obtener el padre de una vista usando uiautomator?
- Seleccione el elemento de AutoCompleteTextView en uiautomator
Aquí está el código de ejemplo:
//Created UI Object for list view UiObject listview_elements = new UiObject(new UiSelector().className("android.widget.ListView")); //Printing the numbmer of child ements present in the List View by using getchildCount() method System.out.println("List view elements : "+listview_elements.getChildCount());*
¿Podría alguien amablemente ayudar a obtener el recuento de todos los elementos de vista de lista incluyendo elementos invisibles (es decir, actualmente no se muestran en la pantalla).
Nota: Tenga en cuenta que aquí no estoy implementando la interfaz de usuario de Android, más bien estoy probando la interfaz de usuario de la aplicación de Android de terceros con UIAutomator de Android.
- Uiautomator "soy comienzo"
- Prueba de UiAutomator 2.0 desde la línea de comandos
- UIAutomator corriendo con espresso
- uiautomator - no puede obtener ListView para desplazarse como validar el texto en cada elemento de la lista. sólo falla cuando golpeo el último elemento en la pantalla
- Cómo cerrar una aplicación de Android con UiAutomator?
- ¿Cómo presionar un botón dos veces con Google UiAutomator?
- UiScrollable no funciona en Android uiautomator
- Cómo cambiar el título de las actividades en attach ()
Si la lista es de tamaño uniforme, (usted sabe cuán alto es cada vista individual) podría hacer lo siguiente:
En primer lugar obtener el ListView como un UiScrollable .
Llame a scrollToBeginning () para comenzar en la parte superior de ListView.
Llame a getChildCount () para obtener el número de niños en la pantalla
scrollForward () hasta que la vista inferior ya no sea visible.
Llame a getChildCount () de nuevo y repita el proceso hasta que esté en la parte inferior de la vista.
Podrías averiguar cuantos swipes debes hacer para llegar al fondo realizando un golpe, y ver si scrollToEnd () devuelve false, (ya estaba en la parte inferior). Si scrollToEnd () devuelve true, tendrás que volver a la parte superior y empezar de nuevo, esta vez aumentando la cantidad de swipes que hagas por uno. Si necesita verificar que un solo elemento está en el listview (ya que este método de determinar longitud y pasar a través de sería muy lento) siempre se puede utilizar los métodos getChildBy … ().
Un poco tarde, pero aquí hay algunas sugerencias.
Recuerde que puede utilizar UI Automator Viewer para identificar ID de recursos y tal. AndroidSDKPath \ tools \ uiautomatorviewer
Un par de consideraciones que cambian la forma en que nos acercamos a esto.
- ¿Pueden hacer clic los elementos de la lista?
- ¿Son los elementos de la lista del mismo tamaño?
- ¿Los elementos contienen campos de texto distintos?
Suponiendo que los elementos de la lista son clicables, puede utilizar un selector como este:
UiSelector selector = new UiSelector().clickable(true);
Si los elementos contienen campos de texto distintos, puede utilizar un conjunto de Java para realizar un seguimiento de las cadenas que representan cada elemento.
Si los elementos de la lista son del mismo tamaño, puede utilizar un bucle y desplazarse hacia arriba por la misma cantidad cada vez. De lo contrario, puede ver el siguiente elemento de la lista, obtener sus límites, obtener la coordenada superior y, a continuación, desplazarse hacia arriba hasta llegar a la parte superior de la lista (esto puede ser la parte inferior de una barra de herramientas). Usted puede comprobar si usted golpea la tapa mirando los límites.
Al escribir un bucle, la idea sería incrementar el índice sólo si llegas al final de la lista ya que cuando se desplaza hacia arriba el elemento más superior se convertirá en la posición 0.
Su bucle sería algo como esto:
//UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());; UiObject list = device.findObject(new UiSelector().resourceId(PACKAGE + ":id/" + resourceId)); int index = 0; int count = 0; while (index < list.getChildCount()) { UiObject listItem = list.getChild(selector.index(index)); Set<String> examinedItems = new LinkedHashSet<>(); //if first item is a bit out of view (under toolbar) then skip it if (listItem.getBounds().top < TOOLBAR_BOTTOM_Y) { index++; continue; //this will only ever happen once = reached end of list } //get unique details from each item //for example, you might get a text field for that list item list this //UiObject textField = listItem.getChild(new UiSelector().resourceId(PACKAGE + ":id/" + childResourceId)); String itemDetails = ...; //this would be relevent if the list was perfectly scrolled to the top and we don't know we are at the end of the list if (examinedItems.contains(itemDetails)) { index++; continue; } //do any actual testing on the item here.. count++; //if index > 0 we have reached the end of the list if (index == 0) { //you'll need to inherit from InstrumentationTestCase so you can pass an instance to this method TouchUtils.drag(this, CENTER_X, CENTER_X, START_SCROLL_Y, START_SCROLL_Y - ITEM_HEIGHT, 150); } examinedItems.add(itemDetails); } //maybe return count here
Use listView.getCount()
– devuelve el número de todos los childs en un listView.
documentación
- Sólo diapositiva Vista parcial de la vista de paginador de vista en Android
- Romper una línea sin aumentar la longitud del texto