HtmlUnitDriver (HtmlUnit) vs GhostDriver (PhantomJS)?

nous sommes en train de choisir notre navigateur sans tête pilote de solution, ce sera une mise en œuvre de Selenium WebDriver. Il y a le GhostDriver, qui tire le PhantomJS dans le backend d'un côté, et HtmlUnitDriver qui interface htmlunit sur l'autre.

PhantomJS utilise WebKit, le moteur de rendu de Safari, pour rendre les pages tandis que HtmlUnitDriver utilise le moteur Rhino qui aucun autre navigateur utiliser (c'est juste "simuler" le comportement du navigateur. Le dernier fait considéré comme un con, parce que le comportement de rendu peut différer significativement des navigateurs populaires.

à notre avis, PhantomJS est un candidat beaucoup plus fort. Mais, nous ne savons pas tout :) y a-t-il d'autres considérations et compromis dont nous devrions tenir compte dans notre décision? d'autres scénarios où HtmlUnitDriver peut être une meilleure solution?

30
demandé sur Stas 2015-01-18 13:47:38

2 réponses

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 simples et statiques, en particulier celles sans JavaScript. N'importe quelle page un peu complexe semble produire 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 sélénium sur les pages de démonstration, gratter les pages d'état, etc.

PhantomJSDriver (PhantomJS + GhostDriver): pas autant plus rapide que vous pourriez l'espérer contre les navigateurs de bureau, cependant, beaucoup plus facile à configurer que Firefox + xvfb. Par défaut, les screenshots peuvent sembler un peu bizarres, mais il s'avère que C'est généralement parce que PhantomJS par défaut à une fenêtre étroite à moins que (lire ci-dessous pourquoi).


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

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

différentes versions de PhantomJS sont construites contre différentes versions de WebKit. PhantomJS 2.x WebKit 538.x, ce qui le rend équivalent à Safari 7 ou 8. alors que PhantomJS!--3-->1.9.8 WebKit 534.34, qui est l'équivalent de Safari 5.

cela peut être un problème pour vous, puisque Google détermine Safari 5 à être un navigateur" ancien " et donc potentiellement rendre ses pages de recherche différemment.

assurez-vous donc d'utiliser PhantomJS 2.x peut réduire les différences de rendu que beaucoup de gens signalent par rapport aux navigateurs de bureau.


une Autre possibilité intéressante est SlimerJS. Cependant, je ne l'ai pas encore assez fait fonctionner.

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

(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 proxyBrowserMob de muter les requêtes et les réponses plutôt que de tirer parti des fonctionnalités spécifiques au navigateur.)

en somme, je déconseille la création d'un outil ou d'un processus qui force utilisateurs choisissez un navigateur plutôt qu'un autre. Si possible, laissez-les configurer ou annuler. Pour la plupart des cas, je prendrais des PhantomJS, car ça ne vous décevra pas. Cependant, la performance de HtmlUnit doit être considérée 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-does-PhantomJS-compare-to-Selenium

21
répondu Andrew Regan 2017-05-23 10:30:09

j'ai utilisé phantomJS dans quelques projets au cours des dernières années, mais j'ai souvent eu des problèmes avec. 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 en raison de redirections mais je ne suis pas positif (par exemple keycloak log In pages).

Je n'ai pas utilisé HtmlUnit autant, mais en tapant ceci j'évite certains des problèmes fantômes ci-dessus pour moi sur les tests avec les pages de connexion keycloak.

3
répondu Timmeh 2016-04-29 15:38:51