Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Qué tal reescribir el elemento de búsqueda de appium?

¿Qué tal reescribir el elemento de búsqueda de appium?

Intente utilizar los distintos métodos findElement de AppiumDriver y la aplicación de destino que está probando es la aplicación Bloc de notas que viene con el SDK.

1.findElementByName

1.1 Ejemplo

el = driver.findElementByName("Agregar nota");

asserThat(el.getText (), igualTo("Agregar nota"));

1.2 Cómo obtener Nameel = driver.findElementByAndroidUIAutomator("new UiSelector().text(\"Agregar nota\")");

afirmarThat(el.getText(), igualTo("Agregar nota") );

2.1 Ejemplo

2.1.2 Cómo obtener los parámetros de UIAutomator

UIAutomator tiene varias formas de obtener controles, todas las cuales se encuentran a través del objeto UiSelector. Por ejemplo, el uso del texto en la vista para buscar controles en la ventana actual no se presentará en detalle, pero se presentará en. ¡Otro artículo en el futuro! Cómo obtener el control a través de UIAUtomator y luego aplicarlo directamente.

3.findElementByClassName

3.1 Ejemplo

el = driver.findElementByClassName("android.widget.TextView");

afirmarQue( el .getText(), equalTo("Add note"));

3.2 ¿Cómo obtener el ClassName del control? 2 Cómo obtener el ClassName del control

Puede usar la herramienta UIAutomatorViewer para verlo directamente

3.3 Recomendaciones

Usar ClassName generalmente puede obtener múltiples vistas. Hay más de una vista, por lo que debe recorrer las vistas obtenidas y luego abreviar los criterios de búsqueda para obtener el control de destino. En el ejemplo, dado que solo hay un control de vista de texto en la parte superior de la ventana, no es necesario recorrerlo.

4.findElementById

4.1 Ejemplo

el = driver.findElementById("android:id/title");

afirmarQue( el.getText(), equalTo("Add note"));

4.2 Cómo obtener el ID del recurso

Puede obtener el ID del recurso a través de UIAutomatorViewer

4.3 Sugerencias

Puede obtener el ID del recurso a través de UIAutomatorViewer. 3 sugerencias

Si el nivel de API del dispositivo de destino es inferior a 18, UIAutomatorViewer no puede obtener el ID de recurso correspondiente y solo se puede utilizar cuando sea igual o superior a 18.

5.findElementByAccessibilityId

5.1 Ejemplo

el = driver.findElementByAccessibilityId("menu_add_note_description");

afirmarQue(el.getText(), igualTo( "node"));

5.2 ¿Cómo obtener AccessibilityId? 2 Cómo obtener AccessibilityId

Puede obtenerlo a través de UIAutomatorViewer o Appium Inspector

5.3 Notas

El ID de accesibilidad es equivalente a contentDescription en Android. Este atributo está destinado. Facilitar el uso de la aplicación a usuarios con discapacidad física. Por ejemplo, si tenemos un ImageView con una imagen en color compleja, es posible que algunas personas daltónicas no puedan distinguir lo que se dibuja en la imagen. Si el usuario tiene instalada una herramienta de navegación asistida como TalkBack, TalkBack leerá el contenido que el usuario está navegando actualmente. El control textView TalkBack puede leer el contenido directamente, pero ImageView TalkBack solo puede leer el valor de contentDescription para decirle al usuario cuál es la imagen. ¿Cuál es la imagen?

Considere que esta es una propiedad oculta y que varias propiedades utilizadas para buscar controles en Android pueden faltar o estar duplicadas (por ejemplo, la identificación está duplicada, por ejemplo,

6. ?findElementByCssSelector

¿TBD?

¿TBD?, este método debe usarse para ubicar controles en el contenedor WebView, porque aún no se usa para aplicaciones nativas

7. findElementByLinkText

¿TBD?, este método debe apuntar al control debajo del contenedor WebView, ya que actualmente no se utiliza en gran medida en las aplicaciones nativas, así que márquelo y agréguelo. Se agregará cuando sea necesario en el futuro.

8.?findElementByPartialLinkText

TBD?, este método debe estar dirigido al control debajo del contenedor WebView, porque la aplicación nativa no lo usa actualmente. Así que márquelo y agréguelo. si es necesario en el futuro.

9. findElementByTagName

¿Este método ha quedado obsoleto desde Appium 1.0 y fue reemplazado por findElementByClassName? Para obtener más información, consulte ?/appium/appium/blob/master/docs/en/advanced-concepts/migrate-to-1-0.md

10.findElementByXPath

10.1 Ejemplo

el = controlador .findElementByXPath("//android.widget.TextView[contains(@text,'Add note')]");

//el = controlador . findElement(By.xpath("//android.widget.TextView"));

afirmarThat(el.getText(), igualTo("Agregar nota"));

10.2 Cambios en el formato XPath

Después de actualizar desde la versión anterior de Appium 0.18.x a la actual Appium 1.x, tenga en cuenta los cambios en los nombres de las clases y las políticas XPath: ahora necesita usar FQCN para describir sus controles. . Esto significa que el original:

findElementByXpath(""//TextView[contains(@text,'Add note')]"")

debe cambiarse a

findElementByXpath("//android.widget..TextView[contains(@text,'Add note')]")

Para obtener detalles sobre los cambios, consulte Migración de Appium0.18.x a Appium1.x".

Referencia 10.3

Se dice que no es muy estable: ?/appium/appium/issues/3371

bootstraponline comentó en agosto 13

A veces, uiautomator no puede crear dump.xml. El reintento del cliente puede ayudar. No creo que haya nada que podamos hacer al respecto hasta que Google lo solucione. :p> Finalmente, presentamos AppiumDriver. Función getPageSource, que puede imprimir los elementos de la página actual en forma de XML. Se recomienda llamar a esta función cuando no pueda encontrar la vista con el atributo correspondiente y encontrarla lentamente ^_^

.