Ich habe eine Testsuite, die Auswahl von einigen ausgewählten Eingaben (unter Verwendung von Angular Material) umfasst, die wiederum eine Tabelle auslösen, um einige Ergebnisse nach einer asynchronen Operation zu rendern schließt ab.Flakiness beim Versuch, Tabellenzeilendaten nach einer asynchronen Operation zu lesen
Sobald der Vorgang abgeschlossen ist, ich bin versucht, die Werte einer einzelnen Tabellenzeile zu lesen, so ich einige Behauptungen auf den Werten in der Tabellenzelle durchführen kann.
I Verwendung von ein paar Helfer mache, von denen einer einen Wert Zeichenfolge nimmt und verwendet XPath-Abfrage, um zu versuchen eine Tabellenzeile zu extrahieren, wo eine Zeile findet Tabellenzelle enthält, die in den übergebenen enthält Zeichenfolge.
Das Problem, das ich bin vor ist, dass ich expect(cells).toBeDefined()
meine Erwartung undefiniert zurückkehrt. Dies passiert intermittierend, aber ich würde sagen, dass es 75% der Zeit fehlschlägt, also denke ich, dass der xpath-Ansatz wahrscheinlich nicht geeignet ist, oder ich zumindest versuchen sollte, auf mindestens eine Tabellenzeile von Daten zu warten, bevor Assertions versucht werden. Es ist am schlechtesten auf unserem ci-Server (Jenkins), wo es sehr selten passiert, also fühlt es sich für mich wie ein Zeitproblem an.
Der Screenshot von Transporteur auf dem Testfehler gemacht ist wie folgt:
Hier wird die Vergleichsperiode Eingabe aus und die Tabelle ausgewählt hat einen einzelnen Datensatz zeigen, so also, warum ich das Gefühl, Dies ist ein Timing-Problem, bei dem die Datenzeile in der Tabelle zwischen dem Zeitpunkt, zu dem das asynchrone Abrufen von Daten abgeschlossen ist, und der erwarteten Ausführung nicht ordnungsgemäß gerendert wurde.
Hat jemand irgendwelche Vorschläge von Dingen, die ich hier ausprobieren könnte? Irgendwelche empfohlenen Rezepte, denen ich folgen sollte?
Danke für die Anregung, aber ich bekomme die gleichen undefiniert Fehler von Winkelmesser – mindparse
Haben Sie Zellen vor dem 'beforeAll definieren () '? Denn ich habe es gerade angenommen. Außerdem habe ich angenommen, dass Ihre Hilfsfunktion 'browser.wait()' verwendet.Ich gebe nun ein vollständiges Beispiel zu der Antwort, in der ich zusätzlich die Helfer-Funktion in einem 'browser.wait()' eingeschlossen habe, falls die Funktion nur wahr/falsch zurückgibt. Ich habe auch 'then()' entfernt ... das sollte hier nicht nötig sein. –
Danke, mein 'waitForElementToHide' Helfer verwendet browser.wait bereits und yes' cells' ist bereits außerhalb des 'beforeAll' definiert. Versuche einige Variationen basierend auf deinen Alternativen ... – mindparse