Benötigt Capybara Schlaf um zu arbeiten?

8

Anscheinend sind sleep oder wait_until nicht gültig, wenn Sie neuere Capybara-Versionen verwenden, wie in Aktualisierungen .

Ich habe jedoch eine Reihe von Tests, die nur auf schnellen Maschinen funktionieren, wenn ich einen sleep(1) -Aufruf zum Test hinzufüge. Das heißt, ein Test, der wie folgt aussieht:

%Vor%

wird

%Vor%

wo ich unix_wait als definiert habe:

%Vor%

Die Sache ist die, ich habe einen alten Ubuntu 12.04 Quadcore-Laptop, der diese Tests auf Jenkins ausführt, und alles funktioniert gut darauf ohne die unix_wait -Aufrufe. Die Tests sind auf einem Hexacore-Desktop mit Ubuntu 13.10 und einem Macbook-Pro-Laptop fehlgeschlagen. Wenn ich jedoch den unix_wait -Aufruf hinzufüge, werden die Tests bestanden.

Die Testfehler selbst weisen auf Ladefehler hin (dh css-Elemente fehlen bei einigen Läufen, aber nicht bei anderen), und die getesteten Dinge funktionieren tatsächlich, wenn die Site manuell geladen wird.

Also, was ist die geeignete Aktion hier? Offenbar ist sleep während des Tests nicht erlaubt, noch wait_until . Schlaf funktioniert zwar, aber mir scheint es sehr grob. Sollte ich auf #synchronized schauen? Von dem, was ich aus diesen Blogposts entnehme, wird das bereits aufgerufen, wenn ich click_link aufruft und die Tests immer noch fehlschlagen.

Was ist das akzeptierte Protokoll hier?

Ich sollte hinzufügen, weil ich denke, dass es wichtig ist: Dies sind alle Javascript-Tests. Ich verwende Capybara-Webkit, das auf qt4 (nicht qt5) gebaut wurde. Ich erwäge, als Debug-Schritt zu Poltergeist oder einem anderen Javascript-Treiber zu wechseln.

    
mmr 01.11.2013, 23:28
quelle

2 Antworten

4

Falls Sie dies nicht bereits tun, wird in Ihrer Testaussage, wenn Sie nach dem Inhalt auf der Seite suchen, eine bestimmte Zeit warten, bis dieser Inhalt verfügbar wird.

Anstatt also einen Schlaf hinzuzufügen, können Sie etwas hinzufügen wie

%Vor%

Capybara bietet Platz für Ajax und das Laden von Elementen usw., so dass es beim Überprüfen des Inhalts implizit wartet.

Sie können die Standardwartezeit ändern, wenn Sie Elemente laden müssen, von denen Sie wissen, dass sie länger dauern können, z. B. Anfragen / Logins von Drittanbietern

%Vor%     
Asta 11.11.2013 21:35
quelle
0

Eine gute Alternative von wait_until und sleep ist using_wait_time , wovon ein Beispiel unten gezeigt wird.

%Vor%

Sie können die Seite auch neu laden. Danach können Sie prüfen, welche Bedingungen Sie haben. Das funktioniert manchmal für mich.

%Vor%     
Yuxuan Chen 20.06.2016 19:52
quelle