Red de conocimiento informático - Material del sitio web - Cómo utilizar UIAutomation para pruebas automatizadas de iOS

Cómo utilizar UIAutomation para pruebas automatizadas de iOS

1. Su primer script de prueba de UIAutomation

El código de prueba funcional de UIAutomation está escrito en Javascript. UIAutomation está directamente relacionado con la Accesibilidad, que se utiliza para acceder a los elementos de la UI a través de etiquetas y valores y realizar las interacciones correspondientes.

Escribamos nuestro primer código de prueba.

Usando el simulador de iOS

1. Descargue la aplicación de muestra TestAutomation.xcodeproj y ábrala. Este proyecto es una aplicación de barra de pestañas muy simple que contiene 2 pestañas.

2. Asegúrese de que el modo "TestAutomation > iPhone 5.0 Simulator" esté seleccionado como se muestra en la imagen a continuación (tal vez haya cambiado a 5.1, por lo que puede ser un simulador de iPhone 5.1).

3. Inicie Instruments (Producto gt; Perfil), o mediante "I.

4. Seleccione Simulador de iOS a la izquierda, luego seleccione la plantilla de Automatización y haga clic en "Perfil". ".

5. En este momento el instrumento se ha iniciado y luego comienza a grabar directamente. Detenga la grabación aquí (botón rojo o "R").

6. En el " script" en la ventana izquierda, haga clic en Agregar > Crear para crear un nuevo script.

7. En el editor de scripts, ingrese el siguiente código

var target = UIATarget.localTarget() ;

var aplicación = target.frontMostApp();

var ventana = app.mainWindow();

target.logElementTree();

clip_image007[4]

8. Vuelva a ejecutar el script (sin guardarlo). Una vez que el script se esté ejecutando, puede detenerlo después de que llegue el registro. ]

¡Gracias! Eso es todo, hemos completado nuestro primer caso de prueba de UIAutomation

Usando dispositivos iOS

Además de ejecutarlo en el simulador, también puede hacerlo. Ejecute casos de prueba en dispositivos reales. Sin embargo, los casos de prueba automatizados solo se pueden ejecutar en dispositivos que admitan multitarea: iPhone 3GS, iPad, iOS 4.0, etc. Desafortunadamente, el iPhone 3G no es compatible independientemente de la versión del sistema. >El método de operación es el siguiente:

1. Conecte el iPhone a través del puerto USB

2. Seleccione el modo "TestAutomation gt; Dispositivo iOS". p>3. Asegúrese de que el perfil de Desarrollador esté configurado en el modo "Versión" (no el perfil "Distribución Ad-Hoc"). De forma predeterminada, el perfil está configurado en el modo Versión (porque no es necesario configurar el perfil en Depuración). modo).

4 Inicie la prueba

5. Consulte el capítulo anterior sobre el simulador para conocer los siguientes pasos.

2. Manejo de UIAElement y accesibilidad de elementos

Jerarquía de UIAElement

La accesibilidad está estrechamente relacionada con la automatización UIA: si la accesibilidad del control es Si el control es accesible , puede configurar y leer su valor y realizar operaciones relacionadas, mientras que si la accesibilidad del control no es visible, no puede acceder a él a través de la automatización.

Puede configurar la accesibilidad o la automatización de un control a través de Interface Builder o configurando la propiedad isAccessibilityElement mediante programación. Debe tener cuidado al configurar la accesibilidad para las vistas de contenedor (es decir, vistas que contienen otros elementos UIKit). Configurar la accesibilidad de una vista completa "ocultará" la accesibilidad de sus subvistas; por ejemplo, en el proyecto de muestra no puede configurar la accesibilidad de una vista de salida o todas sus subvistas serán inaccesibles. En todo momento, logElementTree es su fiel amigo: imprime en el registro todos los elementos accesibles de la interfaz actual.

Cada control UIKit accesible puede describirse mediante un objeto Javascript (UIAElement), que tiene múltiples propiedades: nombre, valor, elemento, nodo principal. Estas jerarquías UIKit corresponden a árboles jerárquicos de UIAElements.

Por ejemplo, en el código de prueba anterior, al llamar a logElementTree, podemos obtener la estructura de árbol como se muestra a continuación:

- UIATarget: nombre: iPhone Simulator rect: {{0, 0}, {320, 480 }}

| - UIAApplication: nombre: TestAutomation rect: {UIAWindow: rect: {{0, 0}, {320, 480}}

| nombre: Valor de primera vista: Primera vista rect: {{54, 52}, {212, 43}}

| - UIATextField: nombre: Usuario Valor de texto: ¡Toque algún texto aquí | rect: {{20, 179}, {280, 31}}

| - UIAStaticText: nombre: El texto es: valor: El texto es: rect: {{20, 231}, {112, 21}}

| | - UIAStaticText: valor: rect: {{145, 231}, {155, 21}}

| : recto: {{0, 431}, {320, 49}}

|

| | | - UIAButton: {{0, 431}, {320, 49}}

| {2, 432}, {156, 48}}

| - UIAButton: nombre: Segundo rect: {{162, 432}, {156, 48}}

clip_ image001[6]

Puedes acceder al cuadro de texto usando el siguiente código:

var textField =

UIATarget.localTarget().frontMostApp() .mainWindow ().textFields()[0];

Puedes elegir acceder al elemento mediante un índice que comienza desde 0 o por el nombre del elemento. Por ejemplo, también puedes acceder al control de texto. con el siguiente código.

var textField =

UIATarget.localTarget().frontMostApp().mainWindow().textFields()["Texto de usuario"];

Este último Es más claro y directo y debería utilizarse con más frecuencia.

Puede configurar la propiedad de nombre del UIAElement a través de Interface Builder,

clip_image002[6]

o escribiendo código:

myTextField.accessibilityEnabled = YES;

myTextField.accessibilityLabel = @"User Text";

Ahora puedes ver que UIAutomation puede usar propiedades auxiliares para encontrar diferentes controles. Esto es bastante obvio porque, en primer lugar, solo necesita aprender un marco de prueba; en segundo lugar, al escribir código de prueba automatizado, se asegura de que su programa sea accesible al mismo tiempo; Por lo tanto, puede acceder a los controles secundarios de cada objeto UIAElement a través de los siguientes métodos: button(), image(), scrollViews(), textFields(), webViews(), segmentedControls(), slider(), staticTexts(), switch(), tabBar(), tableViews(), textViews(), barra de herramientas(), barra de herramientas(), etc.

Puedes utilizar el siguiente código para acceder a la primera pestaña de la barra de pestañas:

Puedes utilizar el siguiente código para acceder a la primera pestaña de la barra de pestañas:

p>

var tabBar = UIATarget.localTarget().frontMostApp().tabBar();

var tabButton = tabBar.buttons()["Primero"];

La jerarquía de la estructura UIAElement es muy importante y la utilizará con frecuencia más adelante. También debe recordar que puede llamar a logElementTree de UIAAplication en cualquier momento para obtener su estructura.

UIATarget.localTarget().frontMostApp().logElementTree();

En el emulador, también puedes activar el detector de accesibilidad. Inicie el emulador, busque "Configuración > General > Accesibilidad > Comprobador de accesibilidad" y configúrelo en "Activado".

Ese pequeño cuadro colorido es el Comprobador de Accesibilidad. Cuando está cerrado, la accesibilidad está desactivada; cuando está expandida, la accesibilidad está activada. Puede activar o desactivar las funciones de accesibilidad haciendo clic en el botón de flecha de arriba.

Ahora, abre nuestro programa de muestra y activa el detector.

Luego, haga clic en el cuadro de texto para examinar las propiedades de nombre y valor del UIAElement (que en realidad son valores de tipo NSObject, correspondientes a accesibilidadLabel y accesibilidadValue). Este verificador le ayudará a depurar y escribir código de prueba.

Simular acciones del usuario

Vayamos un paso más allá y simulemos alguna interacción del usuario. Solo necesita llamar al tap() del botón para lograr la operación de clic:

var tabBar = UIATarget.localTarget().frontMostApp().tabBar()

var tabButton =; tabBar .buttons()["First"];

// ¡Haz clic en la barra de pestañas!

tabButton.tap();

También puedes llamar a doubleTap() y twoFingerTap() en UIAButtons.

Si no desea operar un elemento específico, también puede operar directamente según el punto de coordenadas especificado en la pantalla. Puede usarlo así:

UIATarget.doubleTap({x: 100, y: 200});

UIATarget.localTarget().tap({x: 100, y: 200});

UIATarget.localTarget().twoFingerTap({x: 100, y: 200});

UIATarget.localTarget().dragFromToForDuration({x: 160, y: 200}, {x: 160, y: 400},

);

UIATarget.localTarget(). flickFromTo({x:160,y:200},{x:160,y:400});

Tenga en cuenta que cuando especifica el intervalo de tiempo de la operación , tiene un rango específico, es decir, arrastrar El intervalo de tiempo entre las operaciones de arrastrar y soltar debe ser mayor o igual a 0,5 segundos y menor a 60 segundos.

Ahora comencemos el ejercicio:

Detenga el instrumento (?R)

En la ventana del script, elimine el script actual

Haga clic en "Agregar > Importar" y seleccione TestAutomation/TestUI/Test-1.js (guarde el siguiente código en esta ruta)

Haga clic en el botón "Grabar" (?R) y vea qué sucede. ..

El siguiente es el código de Test-1.js:

var testName = "Prueba 1";

var target = UIATarget.localTarget(

var app = target.frontMostApp();

var ventana = app.mainWindow()

UIALogger.logStart( testName

app.logElementTree()logElementTree();

//-- Seleccionar elemento

UIALogger.logMessage("Seleccione la primera pestaña");

var tabBar = app.tabBar();

var selectedTabName = tabBar.selectedButton().name();

if (selectedTabName ! = "Primero") {

tabBar.buttons()["First"].tap();

}

//-- Haga clic en el campo de texto

UIALogger.logMessage ("Haga clic en el campo de texto").

logMessage("Toque el campo de texto ahora");

var recetaName = "Nombre inusualmente largo para una receta";

window.textFields()[0].setValue(recipeName

target.delay( 2 );

//-- Haga clic en el campo de texto

UIALogger.logMessage( "Liberar teclado"); /p >

app.logElementTree();

app.keyboard().buttons()["return"].tap();

var textValue = ventana. staticTexts( )["RecetaName"].value();

if (textValue === recetaName){

UIALogger.logPass( testName );

}

else{

UIALogger.logFail( testName );

}

Este script primero inicia el programa que se va a probar. Luego, si la primera pestaña no está seleccionada, cambia a esa pestaña y establece el valor del cuadro de texto encima de ella en "Nombre de receta inusualmente largo" y colapsa el teclado virtual. También hay algunos métodos nuevos que vale la pena señalar: el método logMessage (mensaje de cadena) de UIALogger se usa para generar información que se imprimirá en el registro, mientras que el método logPage (mensaje de cadena) de UIALogger se usa para imprimir la información que se imprimirá en el registro. El método logPass (mensaje de cadena) de UIALogger indica que el script de prueba ha completado con éxito la prueba.

También aprendiste cómo acceder a los botones del teclado y tocarlos:

app.keyboard().buttons()["return"].tap();

p>