2016-03-24 7 views
2

Ich versuche, UI-Tests für meine Anmeldeseite zu schreiben. Die Seite hat einige Intro-Animationen, ein Suchfeld (um den richtigen Server für die Verbindung zu finden), und wenn sie den richtigen Server ausgewählt haben, erscheint ein Benutzername und ein Passwortfeld.EarlGrey Failure - "Die Tastatur verschwand nicht nach dem Auslaufen des Erstbeantwortungsstatus"

Hier ist mein Test so weit:

[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"searchTextField")] 
assertWithMatcher:grey_sufficientlyVisible()]; 
[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"searchTextField")] performAction:grey_typeText(@"gtX9Vn23k1")]; 
[[EarlGrey selectElementWithMatcher:grey_anyOf([self matcherForUITableViewCell], nil)] performAction:grey_tap()]; 

[[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"usernameTextField")] 
assertWithMatcher:grey_interactable()] performAction:grey_tap()]; 
[[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"usernameTextField")] 
    assertWithMatcher:grey_interactable()] performAction:[GREYActions actionForTypeText:@"Why isnt this working?"]]; 

Dieser Test schlägt fehl.

EarlGrey wählt das erste Textfeld (searchTextField) korrekt aus und gibt es ein.

EarlGrey wählt die Tabellenansichtszelle korrekt aus!

EarlGrey wählt dann korrekt die usernameTextField, aber dann ausfällt Text eingeben können, nach einem Timeout, wird folgende Fehler geben:

Exception: ActionFailedException 
Reason: Action 'Type "Why isnt this working"' failed. 
Element matcher: (respondsToSelector(accessibilityIdentifier) && accessibilityID("usernameTextField")) 
Complete Error: Error Domain=com.google.earlgrey.ElementInteractionErrorDomain Code=1 "Keyboard did not disappear after resigning first responder status of <GHDLoginTextField: 0x7fa96a616bd0; baseClass = UITextField; frame = (150 387; 468 29); text = ''; opaque = NO; autoresize = RM+BM; tintColor = UIDeviceWhiteColorSpace 1 1; gestureRecognizers = <NSArray: 0x7fa96a55d5d0>; layer = <CALayer: 0x7fa96a616a80>>" UserInfo={NSLocalizedDescription=Keyboard did not disappear after resigning first responder status of <GHDLoginTextField: 0x7fa96a616bd0; baseClass = UITextField; frame = (150 387; 468 29); text = ''; opaque = NO; autoresize = RM+BM; tintColor = UIDeviceWhiteColorSpace 1 1; gestureRecognizers = <NSArray: 0x7fa96a55d5d0>; layer = <CALayer: 0x7fa96a616a80>>} 

"Keyboard nicht nach dem ausscheid Ersthelfer Status verschwinden did"

Wer weiß, was hier vor sich geht? Seltsamerweise sieht es so aus, als ob EarlGrey das nächste Feld (Passwort-Feld) auswählt, bevor es ausfällt. Ich habe dort keinen UI-Code, um das Passwortfeld überhaupt auszuwählen.

UPDATE: Ich bin mit Return-Taste Typ „Next“ auf diesem Textfeld, so dass, wenn ein Benutzer die Return-Taste tippt, ich will sie zum nächsten Feld nehmen (das Passwort-Feld). Um dies zu tun, wenn ich die Taste Next drücke, gebe ich firstResponder in diesem Textfeld zurück und rufe "findFirstResponder" im Passwortfeld auf.

Das verursacht EarlGray zu Fehler, denn wenn ich den "resignFirstResponder" -Aufruf entferne, dann gibt es meinen Text korrekt ein. Die Frage ist: Warum gibt es die "Next" Taste, wenn ich es nicht sage?

+0

Ist die Autokorrektur für die Tastatur noch aktiviert, wenn sie nicht eingegeben werden kann? EarlGrey hat ein Verhalten, bei dem, wenn AutoKorrektur aktiviert ist, der Erstbeantworter zurücktritt, Autokorrektur aus dem Textfeld ausschaltet und dann zurückkehrt. TTBOMK, das wird gerade geändert. –

+0

Korrektur und Rechtschreibprüfung sind beide deaktiviert. Der Tastaturtyp ist Standard. Aussehen ist "Standard" Return-Taste ist "Weiter" (was Benutzer aus dem Feld Benutzername in das Feld Passwort). – ermterm

+0

Die Anweisung "[[[EarlGrey selectElementWithMatcher: grey_accessibilityID (@" benutzernameTextField ")] assertWithMatcher: grey_interactable()] performAction: grey_tap()];" scheint ein wenig überflüssig zu sein, da auch der darauf folgende typeText all diese Prüfungen durchführen sollte. Könnten Sie das entfernen und überprüfen? –

Antwort

0

Es sieht aus wie ein Fehler in der EarlGray-Quelle. Zeile 182 in GREYActions.m

// If the view already is the first responder and had autocorrect enabled, it must 
    // resign and become first responder for the autocorrect type change to take effect. 
    [firstResponder resignFirstResponder]; 

Es gibt keine Überprüfung, um zu bestimmen, ob die Ansicht zuvor über Autokorrektur aktiviert war. Also werden alle Textfelder "resignFirstResponder" aufrufen. Das ist problematisch für Setups wie meins, wo resigningFirstResponder dann den FirstResponder-Status an ein anderes Textfeld übergibt.

+0

Sie sollten dafür ein GitHub-Problem öffnen https://github.com/google/EarlGrey/issues –

+0

Fertig. Vielen Dank für Ihre Hilfe @gran_profaci – ermterm

+0

das Problem scheint aktualisiert worden zu sein. Damit lösen Sie Ihr Problem? –

Verwandte Themen