2011-11-25 15 views
5

Sto cercando di capire come UIAutomation può essere utilizzato per eseguire test automatici delle applicazioni, quindi ho creato un'app di convertitore di temperatura che può essere guidata dall'interfaccia JavaScript. Ecco l'interfaccia utente:Come ottenere valori dai campi di testo con UIAutomation

enter image description here

Il campo di testo in alto ha un'etichetta di accessibilità di "Celsius", allo stesso modo il campo inferiore ha "Fahrenheit", come la sua etichetta Accessibilità. Sto cercando di guidare attraverso questo 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"); 
} 

Questo imposta correttamente il testo nel campo Celsius a "-40", e quando il pulsante viene toccato, l'applicazione aggiorna il testo nel campo di Fahrenheit "-40.0". Tuttavia, fahrenheitValue ha il valore "Fahrenheit" (il nome/etichetta del campo di testo), quindi il test ha esito negativo. Mi chiedevo se questo fosse forse un problema di temporizzazione, quindi metti un ritardo di un secondo dopo il rubinetto, che non ha cambiato il comportamento.

È possibile estrarre il testo dal campo di testo e confrontarlo con il valore previsto?

risposta

5

Ottiene "Fahrenheit" perché è l'etichetta di accessibilità o perché è il testo segnaposto?

Sembra che value() possa restituire il testo segnaposto. Una soluzione alternativa potrebbe essere quella di modificare il valore del segnaposto quando l'utente inizia a digitare per impostarlo come testo inserito dall'utente e quindi ripristinarlo in Fahrenheit quando vengono eliminati? Suppongo che anche quando chiami setValue agisce come quando i metodi delegati UITextField vengono richiamati?

+1

Questa sembra essere stata la risposta. Ho rimosso il testo segnaposto e ora le cose funzionano come dovrebbero. Probabilmente dovrei presentare un bug su questo :) –

0

È possibile aggiungere un'etichetta alla vista, aggiornarla e leggerla.

+0

Come? Ho provato a utilizzare un UILabel invece di un UITextField e ho avuto lo stesso risultato. –

0

Prova ad agganciare lo Accessibility Inspector per mostrare ciò che UIAutomation "vede" nella tua app. Potrebbe essere che stia leggendo alcuni valori obsoleti a causa del modo in cui imposti i valori nella tua app.

Un modo per rinfrescare i valori è quello di inviare un evento di aggiornamento:

UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil); 
Problemi correlati