2016-10-10 3 views
0

Ich schreibe UI-Tests für meine Anwendung. Wie kann ich die Liste von app.buttons/app.otherElements aktualisieren, nachdem der Bildschirm aktualisiert wurde?Aktualisieren XCUIElementQuery App nach Bildschirmaktualisierungen

Beispiel: Ich dränge Login-Taste auf dem Anmeldebildschirm, warten auf Server-Antwort. Nach der Antwort angekommen sehe ich einen anderen Bildschirm und muss den Knopf drücken, aber button.exists == NO.

Sollte ich jedes Mal eine neue Instanz der App ([[XCUIApplication alloc] init]) erstellen, wenn der Bildschirm aktualisiert wird?

Antwort

1

Sie sollten warten, bis der Anmeldevorgang abgeschlossen ist, indem Sie auf ein eindeutiges Element auf dem Anmeldebildschirm warten, bis nicht vorhanden ist.

XCUIElement *logInButton = app.buttons["signInButton"]; 

// Tap the log in button 
[logInButton tap]; 

// Wait for the login operation to complete 
NSPredicate *notExistsPredicate = [NSPredicate predicateWithFormat:@"exists == false"]; 
[self expectationForPredicate:notExistsPredicate evaluatedWithObject:logInButton handler: nil]; 
[self waitForExpectationsWithTimeout:10.0 handler: nil]; // Adjust timeout as needed 

Dadurch wird sichergestellt, dass die in XCUIApplication verfügbare Ansichtshierarchie aktualisiert wird, wenn sich der Bildschirminhalt ändert.

1

Sie sollten die Schaltfläche erteilen, die Sie nach dem Anmelden in einem AccessibilityIdentifier antippen möchten, und dann warten, bis dies der Fall ist. Dadurch wird sichergestellt, dass Sie erst versuchen, mit Ihrer App zu interagieren, wenn die neue Benutzeroberfläche geladen wurde und nicht nur, dass die alte Benutzeroberfläche verloren gegangen ist.

Ich empfehle dringend die "warten auf dieses Element zu erscheinen" -Funktion in einen Testhelfer, nach Joe Masilotti ausgezeichnete Anleitung, die here gefunden werden kann (obwohl Sie sie in ObjC neu implementieren müssen, wie er sie in Swift schrieb).

Verwandte Themen