Gibt es einen Weg, um Schritt in CasperJS code und Debug-Schritt für Schritt
Aber ich habe mit CasperJS für einige Zeit, und verlassen Sie sich auf console logging für die Fehlersuche. Ich Frage mich, ob es irgendeine IDE, die Unterstützung CasperJS Schritt für Schritt Debuggen oder gibt es andere Möglichkeit(remote-debugging) zu Schritt in CasperJS code? Hat schon jemand erfolgreich gemacht? Jede information wird hilfreich sein.
Dank,
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich Debuggen will mit CasperJS, ich Tue das folgende : ich starte mein script mit slimerJS (es öffnet sich ein firefox-Fenster, so kann ich Sie easilly sehen, klicken Sie auf problem, Probleme der form, Füllung, ajax-Fehler zurückgeben, das hochladen von Medien...-, und in dem Schritt der code-Blöcke).
Mit, dass ich nicht oft zu brauchen, um sich an der Konsole und ich weiß nicht wirklich nennen.capture('img.jpg') mehrere Male, um debug (für die ich jetzt nicht testen, responsive design, so dass ich brauche nicht zu verwenden, erfassen, nehmen Sie einen Blick auf PhantomCSS wenn du es testen).
Benutze ich slimerJS zu Debuggen, die (immer mit casper), aber phantomJS in continuous Integration-jenkins- (headless), allerdings können Sie slimerjs auch die (headless) mit xvfb auf linux oder Mac.
Aber manchmal muss ich mich an der Konsole für weitere Angaben, damit ich diese Optionen verwenden (Sie können aufrufen, dass Sie in die Befehlszeile zu) :
Namen Ihrer Verschlüsse nützlich sein, mit diesen Optionen, denn der name wird angezeigt.
Ich glaube nicht, dass es eine IDE : wenn ein Schritt fehlschlägt, wird der stack mit den folgenden Schritten Stoppt sowieso (gut, es ist immer noch möglich, eine 'Art von hack' mit mehreren wait-and Kapseln, Sie zu führen, verschiedenen Verschlüssen und haben das Ergebnis alle von Ihnen, selbst wenn einer von Ihnen ausfallen, aber in diesem Fall sind wir nicht stapeln synchrone Schritte, aber die Ausführung asynchrone Anweisungen : achten Sie darauf, über timeout und logischen Ablauf, wenn Sie es versuchen). Pflege : ich sagte, 'wenn Sie eine Schritt-fail, wenn es nur eine Anweisung in eine Schließung, die fehlschlägt, natürlich sind die folgenden Schritte ausführen.
So ein Verschluss die fehl -> folgende Schritte werden ausgeführt.
Ein Schritt fehlschlägt (ex : thenOpen(fssfsf) mit fssfsf nicht definiert), wird der Stapel zu stoppen.
Mehrere wait() kann asynchron erfolgen.
Also, wenn Sie haben eine Menge Fehler und führen Sie Ihre tests sequentiell (stacking-Schritte), können Sie nur die debug-einzeln, oder durch die Schließung für das independant-Schritt-Funktionen-ich denke eine IDE könnte in diesem Fall- (->für eine Datei. Die stacks sind natürlich unabhängig, wenn Sie starten ein Ordner). Und in der Regel am Anfang, starten Sie Ihre Datei jedes mal, wenn Sie fertig sind einen Schritt. Und wenn Sie ' re verwendet, um das Werkzeug, Sie schreiben das ganze Skript auf einmal.
In den meisten Fällen Fehler werden durch asynchrone, Umfang, Kontext-Probleme (eigentlich js Probleme, obwohl casper vereinfacht asynchrone Probleme : "The callback/listener-Zeug ist eine Umsetzung der Versprechen-Muster.") :
Wenn Sie wollen, um die Schleife einem Anzug von Anweisungen, vergessen Sie nicht, die IIFE oder verwenden Sie den casper jeder Funktion, und umfassen alle mit ein, dann () - Anweisung (oder direkt eachThen). Ich kann zeigen einige exemples, wenn nötig. Andernfalls wird die Schleife das Letzte Element 'ich.Länge' mal, es ist nicht loop-Bereich in der js, die von Standard-i hat die gleiche Referenz.
Wenn Sie auf einen link klicken und am Ende ein Schritt, verwenden Sie eine wait()-Schritt-Funktion zu - Anweisung nach; statt einer dann(). Wenn ich habe gut verstanden, dann () - Anweisung, es ist gestartet, wenn der Vorherige Schritt abgeschlossen ist. Also es startete kurz nach der klicken Sie auf(). Wenn Sie diese klicken, startet eine ajax-Rückkehr, und Ihre folgenden Schritt kratzen oder testen Sie das Ergebnis dieser ajax zurück, es wird nach dem Zufallsprinzip fehlschlagen, weil Sie nicht ausdrücklich bitten, zu warten, bis die Ressource. Ich sah einige Fragen wie die, die in meinen ersten tests.
Nicht mixt die zwei context : casper Umwelt-und Seiten-DOM-Umgebung. Verwenden Sie die evaluate-Funktion() für die übergabe von einem zum anderen. In der evaluate-Funktion, können Sie übergeben ein argument aus der casper-Kontext auf die Seite DOM...
...Wie :
Oder Sie können es direkt im browser mit slimerJS mit alert() anstatt console.log().
Verwenden setFiltrer zu behandeln, prompt und confirm-box.
Wenn Ihre website existiert in der mobilen version zu, die Sie Bearbeiten können Sie die userAgent-für Ihren mobilen tests.
Können Sie call-Knoten-Module in einem casperJS-Datei, in Dateien mit der tester-Modul zu. Gut es ist nicht ganz richtig, siehe verwenden Sie node-Modul von casper. Einige core-Knoten-features sind implementiert in der phantom (und slimer zu), wie fs, Kind-Prozess, aber Sie sind nicht immer gut dokumentiert. Ich bevorzuge die Ausführung meiner tests mit Knoten, so. Knoten ist nützlich, um starten Sie Ihre tests parallel (Kind-Prozess). Ich schlage vor, Sie zu führen, wie viele Prozesse Sie haben Kern. Nun, es hängt von Ihrer Art von Skript, mit nur normalen Szenario (eine Seite öffnen und überprüfen Sie einige Elemente), die ich ausführen kann, 10 child-Prozesse parallel ohne zufällige Fehler (lokaler computer), aber mit einigen Elementen, die langsam zu laden (als multi svg, manchmal xml...), verwenden Sie require('os').cpus().Länge oder ein Skript, dass : Wiederholen Sie Schritt X-mal. Andernfalls werden Sie den zufälligen Fehler, auch wenn erhöhen Sie den timeout. Wenn es abstürzt, können Sie nicht tun alles andere, dass
reload()
die Seite.Können Sie dann integrieren Sie Ihre tests in jenkins mit dem xunit-Befehl. Geben Sie einfach differents index für jeden log.xml Dateien, jenkins (XUnit -> JUnit) verwalten Sie : das Muster *.xml.
Ich weiß, dass ich nicht wirklich Ihre Frage zu beantworten, aber ich denke, dass zu Debuggen, Liste der wichtigsten spezifischen Probleme bleibt der beste Weg.
Gibt es noch nützliche Funktionen zum Debuggen :
Ich lieber diesen Weg als diesen.debugHTML(). Ich kann schauen in meinem results.html Datei, wenn es fehlende tags (bezogen auf den browser mit firebug oder einem anderen tool). Oder manchmal, wenn ich brauche, um zu überprüfen, gerade einen tag, die Ausgabe in der console ist das kein problem, also : dies.getHTML("meine Auswahl"); und Sie können immer noch leiten Sie die log-Ergebnis :
casperjs test test.js > test.html
Also -> 10sek :
Einige Unterschiede zwischen Phantom und Slimer :
Mit slimer, wenn Sie casper.Optionen.pageSettings.loadImages = false; und in Ihrer Datei, die Sie versuchen zu kratzen oder zu testen/Gewicht Höhe.... ein element, funktioniert das mit slimer aber nicht mit phantom. So legen Sie den Wert true in der bestimmten Datei zu halten, die Kompatibilität.
Müssen Sie einen absoluten Pfad angeben, mit slimer (mit include -, import->input-Medien, ...).
Beispiel :
Um eine Datei aus dem root-Ordner (in jedem Ordner/OS, besser als die Vorherige Aufnahme) -Sie könnte es auch tun, nodeLike mit require()-: