Nightwatch: Besser als '.pause (1000)', um brüchige Tests zu vermeiden?

8

Ist .pause(1000) wirklich die beste Vorgehensweise, um auf die Einreichung von Formularen zu warten? Ich bin auf der Suche nach einer Möglichkeit, ein Formular zuverlässig zu übermitteln, ohne Details über die Seite zu erfahren, die als Ergebnis der Formularübergabe angezeigt wird.

Das Beispiel von der Startseite verwendet .pause(1000) , um auf Formulareinreichungen zu warten, und ironischerweise funktioniert diese Version nicht mehr mit einer modifizierten CSS-Selektor-Version tut dies:

%Vor%

Das Problem mit .pause(1000) , um sicherzustellen, dass das Formular gesendet wird, ist, wie das Zeitlimit ermittelt wird. Es ist entweder Die Tests werden langsam, wenn die Zeitüberschreitung zu lang ist, oder sie werden brüchig, wenn die Zeitüberschreitung zu kurz ist. Langsame Hardware, andere Prozesse auf dem Server, Mondausrichtung, Sie können die "guten" Zeitüberschreitungswerte beeinflussen.

Gibt es eine bessere Möglichkeit zu sagen: "Warten Sie, bis das Formular übermittelt wurde weiter "?

Wir haben stattdessen mit .waitForElementVisible('body', VERY_LONG_TIMEOUT) experimentiert, und es scheint zu funktionieren und dauert nicht länger als nötig, aber ich schätze, das ist auch nicht zuverlässig. Das funktioniert nur, weil die "aktuelle" Seite verschwunden ist (dieses Mal) und wir warten auf den Körper der "neuen" Seite. Und das wird morgen etwas Seltsames passieren und es wird schneller als normal und .waitForElementVisible('body') wird sofort zurückkehren, weil die alte Seite immer noch da ist. == auch spröde. Ist das richtig?

Wenn ja, gibt es einen weniger brüchigen Weg als .pause(1000) oder %Code%? Vor allem, wenn wir nicht viel über das wissen Seite zurückgegeben nach der Einreichung, so können wir nicht .waitForElementVisible('body') ?

Der Grund, warum ich frage, ist, dass unsere Tests eher wie folgt aussahen:

%Vor%

Dieser Fehler wurde behoben, weil das Formular in Ссылка nicht mehr eingereicht wird Chrom 45 :-( Wir möchten eine gute Lösung finden, nicht nur eine, die unter den heutigen Bedingungen zu funktionieren scheint ...

    
Peter V. Mørch 19.10.2015, 21:50
quelle

1 Antwort

5

Haben Sie versucht, waitForElementNotVisible mit waitForElementVisible für den body html zu verketten? Dies sollte nur auf die richtige Zeit bei jedem Schritt warten. Ich würde einige Tests durchführen, um sicherzustellen, dass es nicht spröde ist. Wir verwenden dies, um einen "simulierten Seitenübergang" in einer Single-Page-Anwendung zu überwachen.

z.B.

%Vor%     
u02sgb 22.08.2016 14:24
quelle

Tags und Links