6.3.3. Warum erscheint bei clickAndWaitForPage ein Timeout?

Warum tritt bei dem Aufruf von clickAndWaitForPage immer ein Timeout auf, obwohl die Seite angezeigt wird? Die Methode clickAndWaitForPage wird verwendet, wenn nach dem Klicken einer Komponente eine komplette Seite neu geladen wird. Der Browser versendet einen HTTP-Request und empfängt eine HTTP-Response. Nachdem die Seite vollständig geladen wurde, wird der Aufruf der Methode clickAndWaitForPage beendet. Die Methode erkennt jedoch nicht, wenn die Seite durch einen Ajax-Request geladen wurde. Dynamische Änderungen des DOM-Baums durch JavaScript werden ebenfalls nicht als Neuladen der Seite erkannt. In diesen Situationen muss die Methode clickAndWait verwendet werden.

Alternativ kann auch explizit auf die Existenz konkreter Felder gewartet werden z.B. userField.waitUntilAvailable(). Dieses Vorgehen hat zum einen den Vorteil, dass die Tests schneller durchlaufen, da keine unnötigen Wartezeiten verwendet werden. Zum anderen sind die Tests auch robuster. Dies liegt daran, dass die Verwendung von Timeouts auf unterschiedlichen Plattformen zu Problemen führt. Die Timeouts müssen so klein wie möglich sein, um die Testlaufzeiten nicht zu stark zu verzögern. Auf der anderen Seite müssen die Timeouts groß genug sein, damit die Tests auf allen Umgebungen korrekt ausgeführt werden. Es kommt daher häufig vor, dass die Timeouts zu gering gewählt werden und Tests fehlschlagen, obwohl die Ausführung langsamer ist. Das passiert bei dem expliziten Warten auf Komponenten nicht.