2011-11-25 9 views
5

Estoy tratando de entender cómo se puede usar UIAutomation para realizar pruebas automáticas de aplicaciones, así que creé una aplicación de conversión de temperatura que se puede usar desde la interfaz de JavaScript. Esta es la interfaz de usuario:Obteniendo valores de los campos de texto con UIAutomation

enter image description here

El campo de texto superior tiene una etiqueta de Accesibilidad "Celsius", de manera similar el campo inferior tiene "Fahrenheit", como su etiqueta de Accesibilidad. Estoy tratando de conducir a través de este script:

UIALogger.logStart("Test -40ºC == -40ºF"); 
var window = UIATarget.localTarget().frontMostApp().mainWindow(); 
var celsiusField = window.textFields()["Celsius"]; 
var fahrenheitField = window.textFields()["Fahrenheit"]; 
var convertButton = window.buttons()["Convert"]; 

celsiusField.setValue("-40"); 
convertButton.tap(); 
var fahrenheitValue = fahrenheitField.value(); 
if (fahrenheitValue == "-40.0") { 
    UIALogger.logPass("-40C == -40F"); 
} else { 
    UIALogger.logFail("-40C == " + fahrenheitValue + "F"); 
} 

Esto establece correctamente el texto en el campo Celsius a "-40", y cuando se pulsa el botón, la aplicación actualiza el texto en el campo de Fahrenheit "-40.0". Sin embargo, fahrenheitValue tiene el valor "Fahrenheit" (el nombre/etiqueta del campo de texto), por lo que la prueba falla. Me pregunté si esto podría ser un problema de tiempo, así que puse un retraso de un segundo después del toque, lo que no cambió el comportamiento.

¿Es posible obtener el texto del campo de texto y compararlo con el valor esperado?

Respuesta

5

¿Está obteniendo "Fahrenheit" porque esa es la etiqueta de accesibilidad o porque es el texto del marcador de posición?

Parece que value() puede devolver el texto del marcador de posición. Una solución alternativa podría ser modificar el valor del marcador de posición una vez que el usuario comienza a escribir para configurarlo para que sea el texto que el usuario ingresó y luego revertirlo a Fahrenheit cuando lo elimine. Supongo que, incluso cuando llama a setValue, actúa como lo haría cuando se llama a los métodos delegados UITextField.

+1

Esa parece haber sido la respuesta. Eliminé el texto del marcador de posición, y ahora las cosas funcionan como deberían. Probablemente debería presentar un error sobre eso :) –

0

Puede agregar una etiqueta a su vista, actualizarla y leerla.

+0

¿Cómo? Intenté usar un UILabel en lugar de un UITextField, y obtuve el mismo resultado. –

0

Prueba a conectar el Accessibility Inspector para mostrar lo que UIAutomation "ve" en tu aplicación. Puede ser que esté leyendo algunos valores obsoletos debido a la forma en que configura los valores en su aplicación.

Una forma de actualización de los valores es enviar un evento de actualización:

UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil); 
Cuestiones relacionadas