2013-02-19 5 views
23

Ich versuche gerade, eine kleine Testsuite für CI (Hudson) zu bauen. Ich habe ein komplexes Skript geschrieben, das dynamisch andere Skripte aufruft und ein bestimmtes DIV-Element auffüllt.Alternative zu PhantomJS zum Testen

Meine Selenium-Tests arbeiten für triviale Beispiele (Last www.google.com, Suche nach dem q-Elemente, etc.)

Aber wenn ich versuche, einen komplexen Test auszuführen, die mit den Firefox-Treiber funktionieren In meiner PhantomJS-Instanz stürzt es ab. Ein Segmentfehler tritt auf.

Meine Frage ist, wie kann ich Tests für mein Frontend JS schreiben, das auf einem Hudson-Server läuft, der (kopflos) läuft.

Oder gibt es eine Möglichkeit zu debuggen, was verursacht segfault?

+0

Eine Möglichkeit, Headless zu simulieren, besteht darin, einen Browser auf einem Remote-Grid wie SoceLabs auszuführen. Auf diese Weise müssen Sie sich nicht mit kopflosem Chrom oder Phantomjs herumschlagen. Der Nachteil ist jedoch, dass die Leistung langsamer ist und Sie die Verbindung außerhalb Ihres Netzwerks benötigen (sofern Sie nicht Ihren eigenen dockerisierten Grid-Hub lokal ausführen). – djangofan

Antwort

14

Headless-Installationen sind möglich, wenn Xvfb als virtueller Frame-Puffer verwendet wird (auf Linux-Rechnern, die die Grid-Knoten hosten). Beendet mit diesem und dem Standard-Firefox.

9

Phantom ist ein sich entwickelndes Produkt, das erst vor relativ kurzer Zeit die Fähigkeit zur Integration in Selen erhalten hat, so dass Sie möglicherweise einen Fehler damit bekommen haben; hast du versucht, es den Phantom-Entwicklern zu melden?

  • Alternativen zu Phantom:

    Es gibt nicht viele. Zombie ist eine, die ich kenne, aber Phantom ist Kopf und Schultern über jedem anderen kopflosen Browser.

    Sie können auch einen kopflosen virtuellen Server verwenden, um einen der normalen Webbrowser auszuführen. (Dies hätte auch den Vorteil, dass sie eine reale Test als Phantom)

  • Alternativen zu Selen:

    Sie Sahi als direkter Ersatz zu Selen nutzen könnten. Es ist in der Lage zu den gleichen Dingen, aber funktioniert ganz anders. Ihre Testskripte müssten natürlich neu geschrieben werden.

    Phantom wurde entwickelt, um Skripte zu erstellen, so dass Sie überhaupt kein Treiber-Tool wie Selenium verwenden müssen; Sie können es direkt skripten oder ein Tool wie CasperJS verwenden, um Ihre Testskripte zu schreiben.

+0

Das Problem ist nicht Selen, es ist Phantom JS (Iframe-Problem). Ich weiß nicht, ob Zombie funktionieren würde, aber es ist sowieso keine Option, weil ich Selenium Grid verwende und die Möglichkeit brauche, Knoten für z. IE-Prüfung. – schlingel

14

Slimer.js ist ähnlich Phantom.js, sondern nutzt Gecko statt Webkit.

http://slimerjs.org/

+0

SlimerJS unterstützt Webdriver nicht. – user3060326

+5

Zum Zeitpunkt des Schreibens. Es ist noch nicht wirklich kopflos. – chriz

+0

Funktioniert super. Es hat nicht den Fehler, den ich konfrontiert mit PhantomJS – user1079877

6

jsdom ist eine gute Alternative jetzt, es ist ziemlich ausgereift.

https://github.com/tmpvar/jsdom/

Sein für Headless-Tests. Ich glaube nicht, dass es Screenshots wie Phantomjs machen wird, da es keinen Webkit oder Gekko-Renderer hat, sondern reines JS.

Ich habe dies seit phantomjs segfaults gefunden und die neue Version wird nicht erstellt. slimerjs ist nicht wirklich kopflos, und sein XULRunner basiert, welches FireFox gerade fallen ließ, funktioniert bei meinem aktuellen FF nicht.

jsdom ist ziemlich cool, es begann als XML-Parser Leben und hat jetzt eine vollständige Netzwerk-Backend und jQuery-Unterstützung.

API ist nicht dasselbe wie Phantomjs.

+0

Interessant. Ich werde es mir ansehen. – schlingel