2015-10-27 12 views
17

Ho il seguente test dell'interfaccia utente XCTest che digita il testo in una visualizzazione testuale.Il test dell'interfaccia utente non riesce quando digita il testo in una visualizzazione di testo quando viene eseguito da un bot Xcode

let textView = app.textViews.elementBoundByIndex(0) 
textView.tap() 
textView.typeText("Hello world") 

Quando viene eseguito come bot Xcode che mostra il seguente errore per la chiamata typeText.

Assertion: UI Test Failure - fallito: Timeout durante l'attesa per l'evento chiave per completare

enter image description here

È interessante notare che, quando l'eseguo manualmente dal Xcode sullo stesso computer supera il test . Questo test è passato anche in bot Xcode prima dell'aggiornamento a Xcode 7.1/iOS 9.1. Quale può essere la fonte del problema?

Ecco un demo isolato con il test UI: https://github.com/exchangegroup/UITestTextViewDemo

iOS 9.1 Simulator, OS X 10.11.1 (15B42), Xcode 7.1 (7B91b), OS X Server 5.0.15 (15S4033)

Segnalato ad Apple.

+2

Apple ha infastidito qualcosa con l'aggiornamento XC7.1/iOS 9.1 per Bot. La nostra suite di test verde è diventata rossa in un istante. Fallimento con questo errore, "Timeout waiting for screenshot" o "Timeout starting the sim". Spero davvero che XC7.2 risolverà tutto ciò. –

+2

Sto vedendo lo stesso problema. Non penso di avere una "correzione", ma ho scoperto che se "Aspetto" un po 'più a lungo, a volte il test passerà. Il mio problema particolare è con un WKWebView che ha un campo interno "modificabile contenuto", ma il principio qui è lo stesso. Dopo un "tap" sull'editor, emetto un'attesa del ciclo di esecuzione: NSRunLoop.currentRunLoop(). RunUntilDate (NSDate (timeIntervalSinceNow: 3)) –

+0

qualcosa di nuovo? Ho lo stesso problema in xcode 7.3.1 – emoleumassi

risposta

7

Ho trovato una soluzione per il mio caso e spero che sia di aiuto anche a voi.

Nel mio setUp() e tearDown() (sembra ridondante lo so) ho messo XCUIApplication().terminate(). Questo garantisce che l'app sia terminata prima di eseguire il test successivo e sembra che stia facendo il lavoro.

Ho archiviato un bug con Apple ma per il momento questo mi sta facendo girare l'errore che stavi vedendo. Spero possa aiutare!

3

Ho trovato un'altra soluzione, poiché quella proposta da Konnor non funzionava per me: avevo molti problemi nell'usare UITest su Xcode Bot e il sintomo comune era che il test sul simulatore richiedeva molto più tempo che sulla macchina locale, quindi ho pensato che l'utente _xcsbuildd utilizzato per eseguire i test fosse in qualche modo rallentato.

La mia soluzione è semplice: basta promuovere utente _xcsbuildd per essere un utente "normale". Questo ha un altro vantaggio: se vuoi puoi accedere con quell'utente e vedere i test eseguiti nel simulatore durante l'integrazione, quindi è più facile eseguire il debug!

Ecco come ho fatto:

sudo dscl . -create /Users/_xcsbuildd UserShell /bin/bash 
sudo dscl . -create /Users/_xcsbuildd FirstName Xcode 
sudo dscl . -create /Users/_xcsbuildd LastName Server 
sudo dscl . -create /Users/_xcsbuildd FullName "Xcode Server" 
sudo dscl . -create /Users/_xcsbuildd PrimaryGroupID 20 

poi cambiare la password con:

sudo dscl . -passwd /Users/_xcsbuildd 

non ero in grado di rendere l'utente visualizzato nella finestra di login veloce, in ogni caso si dovrebbe vedi un "altro utente" dove puoi inserire il nome utente "_xcsbuildd" e la password che hai scelto

14

Credo che il problema di fondo sia che "Connect Hardware Keyboard" è attivato di default. Anche se lo si spegne per l'utente principale, l'utente _xcsbuildd utilizza ancora il valore predefinito.Sono stato in grado di risolvere il problema con l'aggiunta di un'azione di test pre al regime con il seguente script:

if [ `defaults read com.apple.iphonesimulator ConnectHardwareKeyboard` -eq 1 ] 
then 
    defaults write com.apple.iphonesimulator ConnectHardwareKeyboard -bool false 
    killall "Simulator" 
fi 

enter image description here

+1

Lo script è davvero utile, devo sempre ricordare di disabilitare la tastiera hardware durante l'esecuzione dei test sulla mia macchina dev. Non ho mai riscontrato questo problema su Xcode Server, ma è utile avere solo per assicurarsi che funzioni come previsto. –

1

mi sono imbattuto in questo problema pure. Ho scritto un test dell'interfaccia utente per catturare screenshot con Snapshot (fastlane) e funziona bene su un simulatore di iPad Air & Pro. Tuttavia, su un simulatore di iPad Retina o iPad 2 viene visualizzato questo messaggio di errore, eseguito dalla riga di comando o direttamente da Xcode.

Una soluzione nel mio caso è stata l'aggiunta di alcune funzioni sleep() tra le istruzioni typeText() e l'errore è andato via.

Modifica: questo risolve solo l'esecuzione manuale da Xcode, tramite la riga di comando causa ancora un errore di test. Ho anche notato che funziona su tutti i simulatori per dispositivi a 64 bit, ma non su dispositivi precedenti.

Edit 2: ho trovato un modo per aggirare il problema utilizzando il simulatore di iOS 9.0, invece di iOS 9.3, come accennato in questa risposta: https://stackoverflow.com/a/36334816/5334132. Questa sembra una buona soluzione finché non viene risolta in una nuova versione di Xcode.

0

Oltre a collegare la tastiera hardware, nessuna di queste cose ha funzionato davvero per me. Ciò che ha funzionato è stato disattivare lo screen saver del Mac e visualizzare lo stato di sospensione nelle impostazioni di sistema. Il mio sospetto è che il simulatore funzioni in modo strano quando il Mac è bloccato o non ha un monitor a cui attingere.

Con queste due impostazioni disattivate, ho ancora alcuni errori casuali di test dell'interfaccia utente. Collegando i monitor hardware o la condivisione dello schermo in modo che il simulatore sia disegnato sullo schermo da qualche parte sembra risolvere quelli però.

0

Sto utilizzando xcode 8.2.1 ed eseguo test su versioni ios 9.3. Un semplice trucco consiste nell'aggiungere un sonno per 2-5 secondi dopo aver toccato la casella di testo e prima di scriverlo. Tuttavia, questa non è una soluzione permanente.

un'altra soluzione AFFIDABILE

Deseleziona tutte le preferenze della tastiera nelle impostazioni prima di eseguire i test.

"KeyboardAllowPaddle": false, 
"KeyboardAssistant": false, 
"KeyboardAutocapitalization": false, 
"KeyboardAutocorrection": false, 
"KeyboardCapsLock": false, 
"KeyboardCheckSpelling": false, 
"KeyboardPeriodShortcut": false, 
"KeyboardPrediction": false, 
"KeyboardShowPredictionBar": false