So habe ich vor ein paar Tagen begonnen, das "neue" XCUI-Testing-Framework für Tech-Evaluierungszwecke zu verwenden. Ich finde das System ziemlich wackelig, da sehr oft die Tests fehlschlagen (normalerweise drücken Tastenbetätigungen mit .tap() einfach nicht die Tastenaktion) und ich muss Xcode neu starten und die DerivedData-Caches löschen, damit es wieder funktioniert. Aber diese eine Sache kann ich überhaupt nicht funktionieren - und es ist über den einfachsten UI-Test Anwendungsfall verfügbar:UILabels neuer Textwert aktualisiert sich nicht im XCUI-Test
Ich habe ein UIButton und ein UILabel. Das UILabel hat zunächst einen Text "initial text". Das Label der Schaltfläche lautet "SHOW MESSAGE". Wenn die Schaltfläche gedrückt wird, wird der Text des Labels in "Neuer Text" geändert. Und natürlich funktioniert das beim Ausführen der App. ;)
Allerdings, wenn ich (initialisiert und Start (nach App-Instanz wurde) ed in setup()) laufen die folgenden XCUI Test:
app.buttons["SHOW MESSAGE"].tap()
XCTAssert(app.staticTexts["new text"].exists)
Der Test schlägt fehl 100% der Zeit. Wenn ich (nach dem Aufruf von .tap()) die statischen Texte mit print(app.staticTexts.debugDescription)
ausdrucke, kann ich dort mein Etikett sehen, aber mit dem Originaltext von "initial text".
Ist all dieses XCUI-Zeug immer noch nur wirklich Alpha-Zeug oder was?
Nun, siehe, ich habe das auch ausprobiert. Ich habe den Accessibility Identifier des Labels auf 'messageLabel' gesetzt und so versucht, aber folgenden Fehler bekommen: 'Assertion Failure: XCTAssertEqual ist fehlgeschlagen: (" Optional ("new text") ") ist nicht gleich (" Optional ("initial text ")") - ' – Matti
Es klingt, als ob die Ansichtshierarchie nicht aktualisiert wurde, um den neuen Wert zu finden. Versuchen Sie es mit expectationForPredicate (oder expectationWithDescription) und waitForExpectationsWithTimeout für einige Sekunden. Dies sollte eine Ansichtshierarchie bei jeder Überprüfung erzwingen. – Oletha
Alternativ kann der Wert an mehr als einer Stelle in Ihrem App-Code festgelegt werden. Hast du einen Wert für das Label im Storyboard oder in der Feder? Dies kann den Wert für XCTest überschreiben, wenn Sie den Wert im Ereignishandler für die gedrückte Schaltfläche ändern. Setze alle Label-Werte programmgesteuert und entferne Werte aus dem Storyboard/der Nib. – Oletha