2015-10-27 9 views
17

Ich habe den folgenden XCTest-UI-Test, der Text in eine Textansicht eingibt.UI-Test schlägt fehl, wenn Text in eine Textansicht geschrieben wird, wenn er von einem Xcode-Bot ausgeführt wird

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

Wenn als Xcode bot führen Sie es zeigt die folgende Fehlermeldung für den typeText Anruf.

Assertion: UI Testing Failure - fehlgeschlagen: Timed für Schlüsselereignis wartet, um abzuschließen

enter image description here

Interessanterweise, wenn ich es manuell ausführen, von der Xcode auf demselben Computer den Test bestanden . Dieser Test wurde auch in Xcode Bot vor dem Upgrade auf Xcode 7.1/iOS 9.1 bestanden. Was kann die Ursache des Problems sein? Hier

ist eine isolierte Demo mit dem UI-Test: 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)

Berichtet an Apple.

+2

Apple hat etwas mit XC7.1/iOS 9.1 Update für Bots verschraubt. Unsere grüne Testsuite wurde im Handumdrehen rot. Wenn dieser Fehler nicht auftritt, "Timeout waiting for screenshot" oder "Timeout starting the sim". Ich hoffe wirklich, dass XC7.2 das beheben wird. –

+2

Ich sehe das gleiche Problem. Ich glaube nicht, dass ich einen "Fix" habe, aber ich habe festgestellt, dass, wenn ich etwas länger "warte", der Test bestanden wird. Mein besonderes Problem ist mit einem WKWebView, das ein internes "Inhalt editierbares" Feld hat, aber das Prinzip ist hier das gleiche. Nach einem "Tap" auf dem Editor, gebe ich eine Run-Loop-Wartezeit aus: NSRunLoop.currentRunLoop(). RunUntilDate (NSDate (timeIntervalSinceNow: 3)) –

+0

etwas Neues? Ich habe das gleiche Problem in Xcode 7.3.1 – emoleumassi

Antwort

7

Ich habe eine Lösung für meinen Fall gefunden und ich hoffe, es hilft Ihnen auch.

In meinem setUp() und tearDown() (scheint redundant, ich weiß) ich XCUIApplication().terminate() setzen. Dies stellt sicher, dass die App beendet wird, bevor der nächste Test ausgeführt wird, und es scheint den Job zu erledigen.

Ich habe einen Fehler mit Apple eingereicht, aber vorläufig bringt mich das um den Fehler, den Sie gesehen haben. Ich hoffe, das hilft!

3

Ich fand eine andere Lösung, da die von Konnor vorgeschlagene nicht funktionierte für mich: Ich hatte viele Probleme mit UITest auf Xcode Bot, und das gemeinsame Symptom war, dass das Testen auf Simulator viel mehr Zeit in Anspruch nahm als auf der lokalen Maschine, also dachte ich, dass der _xcsbuildd Benutzer, der die Tests ausgeführt hat, in irgendeiner Weise verlangsamt wurde.

Meine Lösung ist einfach: nur fördern _xcsbuildd Benutzer zu einem "normalen" Benutzer. Dies hat einen weiteren Vorteil: Wenn Sie möchten, können Sie sich mit diesem Benutzer anmelden und sehen, dass die Tests während der Integration im Simulator ausgeführt werden, sodass das Debuggen einfacher ist!

Hier ist, wie ich es tat:

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 

Dann ändern Sie das Passwort mit:

sudo dscl . -passwd /Users/_xcsbuildd 

ich nicht in der Lage war, die der Benutzer im Fast-Login-Fenster erscheinen zu machen, trotzdem sollten Sie Sehen Sie einen "anderen Benutzer", wo Sie den Benutzernamen "_xcsbuildd" und das Passwort eingeben können

14

Ich glaube, das zugrunde liegende Problem ist, dass "Connect Hardware Keyboard" standardmäßig aktiviert ist. Selbst wenn Sie sie für den Hauptbenutzer deaktivieren, verwendet der _xcsbuildd-Benutzer immer noch den Standardwert.Ich war in der Lage, das Problem zu lösen, indem eine vorgeTestAktion auf das Schema mit dem folgenden Skript hinzufügen:

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

Das Skript ist wirklich nützlich, ich muss immer daran denken, Hardware-Tastatur zu deaktivieren, während Tests auf meinem Dev-Rechner laufen. Ich habe dieses Problem auf dem Xcode Server nie erlebt, aber es ist nützlich, nur um sicherzustellen, dass es wie erwartet funktioniert. –

1

ich auch in diese Ausgabe lief. Ich habe einen UI-Test geschrieben, um Screenshots mit Snapshot (Fastlane) zu erstellen, und es läuft gut auf einem iPad Air & Pro-Simulator. Auf einem iPad Retina oder iPad 2 Simulator bekomme ich diese Fehlermeldung, entweder von der Befehlszeile oder direkt von Xcode.

Eine Lösung in meinem Fall war, einige sleep() - Funktionen zwischen den typeText() -Anweisungen hinzuzufügen und der Fehler ging weg.

Bearbeiten: Dies repariert nur manuell von Xcode, über die Befehlszeile führt es immer noch einen Testfehler. Ich habe auch festgestellt, dass es auf allen Simulatoren für 64-Bit-Geräte funktioniert, aber nicht auf älteren Geräten.

Bearbeiten 2: Ich habe einen Weg gefunden, um dieses Problem zu umgehen, indem Sie den iOS 9.0-Simulator anstelle von iOS 9.3 verwenden, wie in dieser Antwort erwähnt: https://stackoverflow.com/a/36334816/5334132. Dies scheint eine gute Problemumgehung zu sein, bis es in einer neuen Version von Xcode behoben wird.

0

Abgesehen von Hardware-Tastatur, funktionierte nichts von diesen Dingen wirklich für mich. Was war Arbeit war Ausschalten des Macs Bildschirmschoner und Anzeige Schlaf in den Systemeinstellungen. Mein Verdacht ist, dass der Simulator seltsam funktioniert, wenn der Mac gesperrt ist oder keinen Monitor zum Zeichnen hat.

Mit diesen beiden Einstellungen habe ich immer noch ein paar zufällige UI-Test Fehler. Das Anschließen von Hardware-Monitoren oder die Bildschirmfreigabe, so dass der Simulator irgendwo auf dem Bildschirm angezeigt wird, scheint diese jedoch zu lösen.

0

Ich verwende xcode 8.2.1 und laufende Tests auf ios 9.3 Versionen. Ein einfacher Hack besteht darin, nach dem Tippen auf das Textfeld und vor dem Tippen darauf einen Schlaf für 2-5 Sekunden hinzuzufügen. Dies ist jedoch keine dauerhafte Lösung.

ANOTHER SICHERE LÖSUNG

Unselect alle Tastatureinstellungen in Einstellungen, bevor die Tests ausgeführt werden.

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