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.

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.

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

  • UiAutomator getLastTraversedText ()
  • UIautomator cómo obtener el hijo por índice o instancia
  • Proporcionando retraso entre eventos en UiAutomator Android
  • Android UiAutomatorViewer no puede detectar algunas vistas
  • Ejecute UiAutomator API desde Android Studio (v0.8)
  • UIAutomator en Android más bajo que 4.3
  • Cómo depurar las secuencias de comandos de UIAutomator con Eclipse
  • Android uiautomator para hacer clic en ListView
  • UI Automator en proyecto con minSdkVersion 9
  • AccessibilityService se destruye cuando se ejecuta uiautomator
  • UiAutomator volcado para Lollipop Lost WebView Ver jerarquía
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.