web-dev-qa-db-de.com

HtmlUnitDriver (HtmlUnit) vs. GhostDriver (PhantomJS)?

Wir sind gerade dabei, unsere headless browser - Treiberlösung zu wählen, die einige Implementierungen von Selenium WebDriver enthält . Es gibt die GhostDriver , die die PhantomJS im Backend auf dem eine Seite und HtmlUnitDriver die auf HtmlUnit basierend auf der anderen. 

PhantomJS verwendet WebKit, die Rendering-Engine von Safari, um die Seiten zu rendern, während HtmlUnitDriver die Rhino-Engine verwendet, die von keinem anderen Browser verwendet wird (es handelt sich lediglich um ein "Simulieren" des Browserverhaltens. Die letzte Tatsache ist ein Nachteil, da das Rendering-Verhalten erheblich von dem abweichen kann die beliebten Browser.

PhantomJS ist aus unserer Sicht ein viel stärkerer Kandidat. Aber wir wissen nicht alles :) Gibt es andere Überlegungen und Kompromisse, die wir bei unserer Entscheidung berücksichtigen sollten? andere Szenarien, in denen HtmlUnitDriver eine bessere Lösung sein kann? 

31
Stas

Aus meiner Erfahrung mit einer Reihe von Headless-Browsern würde ich sagen:

HtmlUnitDriver: Die schnellste aller Implementierungen, auf die ich gestoßen bin, und perfekt für einfache, statische Seiten, insbesondere solche ohne JavaScript. Jede entfernt komplexe Seite scheint Probleme zu bereiten - das ist meine praktische Erfahrung, auch wenn ich es nicht im Detail rechtfertigen kann. Perfekt zum Testen von Selenium-Funktionen auf Demoseiten, zum Scrappen von Statusseiten usw.

PhantomJSDriver (PhantomJS + GhostDriver): nicht so viel schneller, wie Sie es sich erhoffen, jedoch viel einfacher einzurichten als Firefox + xvfb. Standardmäßig können Screenshots aber etwas seltsam aussehen dies stellt sich normalerweise heraus, da PhantomJS standardmäßig ein schmales Fenster verwendet, sofern dies nicht ausdrücklich festgelegt ist (Lesen Sie weiter unten, warum).


Update: Ein bisschen detaillierter über PhantomJS-Versionen, von meine andere Antwort .

Wie Safari verwendet PhantomJS WebKit zum Rendern (z. B. Firefox verwendet Gecko)

Verschiedene PhantomJS-Versionen werden für verschiedene WebKit-Versionen erstellt. PhantomJS 2.xverwendet WebKit 538.x, womit es entspricht Safari 7 oder 8 . während PhantomJS 1.9.8verwendet WebKit 534.34, was Safari 5 entspricht.

Dies kann ein Problem für Sie sein, da Google Safari 5 als "alten" Browser einstuft und daher möglicherweise die Suchseiten werden anders gerendert .

Wenn Sie also sicherstellen, dass Sie PhantomJS 2.x verwenden, können Sie die Rendering-Unterschiede verringern, die viele Benutzer im Vergleich zu Desktop-Browsern melden.


Eine andere interessante Möglichkeit ist SlimerJS . Ich habe es jedoch noch nicht verlässlich genug zum Arbeiten gebracht.

Ich hatte noch nie Zuverlässigkeitsprobleme mit HtmlUnitDriver oder PhantomJSDriver (das einzige Ärgernis war ein HttpClient 4.5/HtmlUnit 2.17-Inkompatibilitätsproblem ).

(Als Antwort auf den Kommentar zum Ändern von HTTP-Anforderungen würde ich persönlich empfehlen, an der WebDriver-API festzuhalten und einen Proxy like BrowserMob zu verwenden, um Anforderungen und Antworten zu mutieren, anstatt Browser-spezifische Funktionen nutzen.)

Alles in allem würde ich davon abraten, ein Tool oder einen Prozess zu erstellen, bei dem erzwingt Benutzer einen Browser einem anderen vorziehen. Wenn möglich, erlauben Sie ihnen, zu konfigurieren oder zu überschreiben. In den meisten Fällen würde ich mich für PhantomJS entscheiden, da es Sie nicht im Stich lässt. Die Leistung von HtmlUnit sollte jedoch für die einfachsten Seiten berücksichtigt werden.

Siehe auch (möglicherweise): http://www.guru99.com/Selenium-with-htmlunit-driver-phantomjs.html und https://www.quora.com/Software -Test/How-does-PhantomJS-Vergleich-mit-Selen

23
Andrew Regan

Ich habe in den letzten Jahren in einigen Projekten phantomJS verwendet, hatte aber oft Probleme damit. Zum Beispiel Javascript auf Seiten, die sich von Chrome, Firefox und Internet Explorer unterscheiden. Einige Seiten werden einfach nicht geladen, möglicherweise aufgrund von Weiterleitungen, aber ich bin nicht positiv (z. B. Keycloak-Log-in-Seiten).

Ich habe HtmlUnit nicht so oft verwendet, aber während ich dies tippe, werden einige der oben genannten Phantomprobleme bei Tests mit Keycloak-Anmeldeseiten vermieden.

3
Timmeh

PhantomJS-Entwicklung wurde wurde am 3. März 2018 ausgesetzt , während der Headless-Modus zu Chrome und Firefox hinzugefügt wurde

Wenn Sie also Updates erhalten möchten, sollten Sie entweder HtmlUnit, Chrome oder Firefox für einen Headless-Treiber verwenden.

0