web-dev-qa-db-fra.com

HtmlUnitDriver (HtmlUnit) vs GhostDriver (PhantomJS)?

Nous sommes en train de choisir notre solution de pilote headless qui sera une implémentation de Selenium WebDriver . Il existe le GhostDriver , qui exploite le PhantomJS dans le backend sur le un côté et HtmlUnitDriver qui repose sur HtmlUnit de l’autre. 

PhantomJS utilise WebKit, le moteur de rendu de Safari, pour restituer les pages, tandis que HtmlUnitDriver utilise le moteur Rhino qu'aucun autre navigateur n'utilise (il ne fait que "simuler" le comportement du navigateur. Ce dernier fait est considéré comme un con, car le comportement du rendu peut différer considérablement les navigateurs populaires.

À notre avis, PhantomJS est un candidat beaucoup plus fort. Mais nous ne savons pas tout :) Y at-il d’autres considérations et compromis à prendre en compte dans notre décision? d'autres scénarios où HtmlUnitDriver peut être une meilleure solution? 

31
Stas

D'après mon expérience avec un certain nombre de navigateurs sans tête, je dirais:

HtmlUnitDriver: la plus rapide de toutes les implémentations que j'ai rencontrées, et parfaite pour les pages statiques simples, en particulier celles sans JavaScript. Toute page à distance complexe semble poser des problèmes - c'est mon expérience pratique même si je ne peux pas justifier en détail. Parfait pour tester les fonctionnalités de Selenium sur les pages de démonstration, lire les pages d'état, etc.

PhantomJSDriver (PhantomJS + GhostDriver): pas aussi vite qu'on pourrait l'espérer par rapport aux navigateurs de bureau, mais beaucoup plus facile à configurer que Firefox + xvfb. Par défaut, les captures d'écran peuvent paraître un peu bizarres, mais cela s’avère généralement être dû au fait que PhantomJS utilise par défaut une fenêtre étroite, sauf définition explicite (lisez ci-dessous pour pourquoi).


Update: un peu plus de détails sur les versions de PhantomJS, de mon autre réponse .

Comme Safari, PhantomJS utilise WebKit pour le rendu (par exemple, Firefox utilise Gecko).

Différentes versions de PhantomJS sont construites à partir de différentes versions de WebKit. PhantomJS 2.xutilise WebKit 538.x, ce qui le rend équivalent à Safari 7 ou 8 . alors que PhantomJS 1.9.8utilise WebKit 534.34, ce qui est équivalent à Safari 5.

Cela peut être un problème pour vous, car Google détermine que Safari 5 est un "ancien" navigateur et donc potentiellement affichera les pages de recherche différemment

Vous pouvez donc utiliser PhantomJS 2.x afin de réduire les différences de rendu signalées par de nombreuses personnes par rapport aux navigateurs de bureau.


Une autre possibilité intéressante est SlimerJS . Cependant, je ne l'ai pas encore fait fonctionner de manière suffisamment fiable.

Je n'ai jamais eu de problèmes de fiabilité avec HtmlUnitDriver ou PhantomJSDriver (le seul inconvénient était un problème d'incompatibilité HttpClient 4.5/HtmlUnit 2.17 ).

(En réponse au commentaire sur la modification des requêtes HTTP, je vous recommande personnellement de vous en tenir à l'API WebDriver et d'utiliser un proxy comme BrowserMob pour modifier les requêtes et les réponses plutôt que de tirer parti des fonctionnalités spécifiques du navigateur. )

Dans l’ensemble, je déconseille de créer un outil ou un processus qui force les utilisateurs à choisir un navigateur plutôt qu’un autre. Si possible, laissez-les configurer ou remplacer. Dans la majorité des cas, je préférerais PhantomJS, car cela ne vous laissera pas tomber. Cependant, les performances de HtmlUnit doivent être prises en compte pour les pages les plus simples.

Voir aussi (peut-être): http://www.guru99.com/Selenium-with-htmlunit-driver-phantomjs.html et https://www.quora.com/Software-Testing/How- ne-PhantomJS-comparer-à-sélénium

22
Andrew Regan

J'ai utilisé phantomJS dans quelques projets au cours des deux dernières années, mais j'ai souvent eu des problèmes avec cela. Par exemple, javascript sur les pages se comportant différemment de chrome, firefox, internet explorer. Certaines pages ne se chargent tout simplement pas, peut-être à cause de redirections, mais je ne suis pas positif (par exemple, les pages de journal de keycloak).

Je n'ai pas autant utilisé HtmlUnit, mais ce texte évite certains des problèmes fantômes décrits ci-dessus lors de tests avec des pages de connexion keycloak.

3
Timmeh

Le développement de PhantomJS a a été suspendu le 3 mars 2018 tandis que le mode sans tête a été ajouté à Chrome et à Firefox.

Cela signifie que si vous souhaitez recevoir des mises à jour, vous devez utiliser HtmlUnit, Chrome ou Firefox pour un pilote sans tête.

0
Marek Andreansky