automation instruments ui-automation

automation - UIATarget.onAlert=function onAlert(alerta) Issue-Parece que el script no entra correctamente en el bloque



instruments ui-automation (2)

Gracias en primer lugar por tomarse el tiempo para leer y, con suerte, ofrecer algo de incitación a mi problema. Por el momento, simplemente intento automatizar el inicio de sesión y el cierre de sesión de una aplicación que mi compañía está utilizando con Instruments. Me encontré con algunos pequeños problemas (como se puede ver con la entrada de la contraseña, saco char por char en lugar de usar cadena debido a un extraño problema de tipeo).

El problema es que cuando aparezca la alerta emergente en la pantalla, deseo tocar el botón Cerrar sesión. Sin embargo, parece que nunca entro al bloque que debería manejar la alerta. Puedo deducir esto debido a los logMessages que rellené en el bloque onAlert, que no aparecen en mis registros cuando se ejecuta el script de prueba. Sé que el controlador predeterminado simplemente descarta cualquier alerta a menos que la alerta se maneje explícitamente de lo contrario. También creo que estoy, o al menos trato de manejar explícitamente esa alerta para que pueda presionar el botón derecho.

¿Qué estoy haciendo mal? Seguí la guía de Apple Instruments y creo que estoy usando la misma sintaxis exacta que ofrecen como ejemplo. Encuentra mi código a continuación, lo incluí todo, pero el bloque de interés está al final.

var target = UIATarget.localTarget(); var password = "something" UIALogger.logStart("Test1"); target.frontMostApp().mainWindow().scrollViews()[0].webViews()[0].textFields()[0].tap(); target.frontMostApp().keyboard().typeString("something"); UIATarget.localTarget().delay(2); target.frontMostApp().mainWindow().scrollViews()[0].webViews()[0].secureTextFields()[0].tap(); UIATarget.localTarget().delay(2); for (i = 0; i < password.length; i++){ var strChar = password.charAt(i); target.frontMostApp().keyboard().typeString(strChar); } target.frontMostApp().mainWindow().scrollViews()[0].webViews()[0].buttons()["Log in"].tap(); target.frontMostApp().mainWindow().tableViews()[0].cells()["Wipe data after 10 attempts"].staticTexts()["Wipe data after 10 attempts"].scrollToVisible(); target.frontMostApp().mainWindow().tableViews()[0].groups()["logout default"].buttons()["logout default"].tap(); // Alert detected. Expressions for handling alerts should be moved into the UIATarget.onAlert function definition. UIALogger.logMessage("Just before alert"); UIATarget.onAlert = function onAlert(alert){ UIALogger.logMessage("In Alert!"); UIATarget.delay(1); var title = alert.name(); UIALogger.logMessage("Alert with title ''" + title + "'' encountered!"); UIALogger.alert.logElementTree(); alert.buttons()["Logout"].tap(); }


Tuve este problema y, finalmente, descubrí que el código de automatización progresaba a la siguiente línea antes de que apareciera la UI (en este caso, la vista de alerta) en el simulador. Para mitigar esto, agregué un retraso antes del bloque onAlert para permitir que se muestre la vista de alerta.

UIATarget.localTarget().delay(3) UIATarget.onAlert = function onAlert(alert){ var title = alert.name(); UIALogger.logWarning("Alert with title ’" + title + "’ encountered!"); target.frontMostApp().alert().cancelButton().tap(); return false; // use default handler }


Tienes algunos errores tipográficos.

Primero, debe definir la función de manejo de alertas antes de ejecutar su código de prueba. Moverlo a la parte superior de su script de prueba.

En segundo lugar, su definición y asignación de una función es ligeramente incorrecta. En lugar de esto:

UIATarget.onAlert = function onAlert(alert){

Deberías tener esto:

UIATarget.onAlert = function (alert){

Finalmente, este controlador de alerta es solo para alertas a nivel de iOS , como ventanas emergentes de permisos. Aquí estoy adivinando, pero alert.buttons()["Logout"].tap(); parece algo que tu propia aplicación está creando. No necesita un controlador de alerta para esto; simplemente acceda a él en el árbol de elementos como cualquier otro elemento de la interfaz de usuario, y tóquelo.