selenium-webdriver phantomjs htmlunit ghostdriver htmlunit-driver

selenium webdriver - HtmlUnitDriver(HtmlUnit) vs GhostDriver(PhantomJS)?



selenium-webdriver htmlunit-driver (2)

He usado phantomJS en algunos proyectos en los últimos años, pero a menudo he tenido problemas con él. Por ejemplo, javascript en páginas que se comportan diferente a Chrome, Firefox, Internet Explorer. Algunas páginas simplemente no se cargan, posiblemente debido a redireccionamientos, pero no estoy seguro (por ejemplo, las páginas de inicio de sesión de la capa clave).

No he usado HtmlUnit tanto, pero a medida que escribo esto, estoy evitando algunos de los problemas fantasmas anteriores en las pruebas con las páginas de inicio de sesión de la capa clave.

Estamos en el medio de elegir nuestra solución de controlador de navegador sin cabeza que será una implementación de Selenium WebDriver. Está el GhostDriver , que aprovecha el PhantomJS en el backend por un lado y el HtmlUnitDriver que se basa en HtmlUnit en el otro.

PhantomJS usa WebKit, el motor de renderizado de Safari, para renderizar las páginas mientras HtmlUnitDriver usa el motor Rhino que no usan otros navegadores (es solo "simular" el comportamiento del navegador. El último hecho considerado como una estafa, porque el comportamiento de renderización puede diferir significativamente de los navegadores populares.

En nuestra opinión, PhantomJS es un candidato mucho más fuerte. Pero, no sabemos todo :) ¿Hay otras consideraciones y compensaciones que debemos tener en cuenta con nuestra decisión? otros escenarios donde HtmlUnitDriver puede ser una mejor solución?


Según mi experiencia con varios navegadores sin cabeza, diría:

HtmlUnitDriver : la más rápida de todas las implementaciones que he encontrado, y perfecta para páginas simples y estáticas, especialmente aquellas sin JavaScript. Cualquier página remotamente compleja parece producir problemas, esa es mi experiencia práctica, incluso si no puedo justificar en detalle. Perfecto para probar las funciones de Selenium en páginas de demostración, páginas de estado de borrado, etc.

PhantomJSDriver (PhantomJS + GhostDriver): no mucho más rápido de lo que cabría esperar en comparación con los navegadores de escritorio, sin embargo, es mucho más fácil de configurar que Firefox + xvfb. De forma predeterminada, las capturas de pantalla pueden parecer un poco extrañas, pero eso suele ocurrir porque PhantomJS se establece de manera predeterminada en una ventana estrecha a menos que se establezca explícitamente (lea a continuación por qué).

Actualización: un poco más de detalle en las versiones de PhantomJS, de mi otra respuesta .

Al igual que Safari, PhantomJS usa WebKit para renderizar (por ejemplo, Firefox usa Gecko)

Diferentes versiones de PhantomJS están compiladas contra diferentes versiones de WebKit. PhantomJS 2.x uses WebKit 538.x, que lo hace equivalente a Safari 7 u 8 . mientras que PhantomJS 1.9.8 uses WebKit 534.34, que es equivalente a Safari 5.

Esto puede ser un problema para usted, ya que Google determina que Safari 5 sea un "viejo" navegador y, por lo tanto, potencialmente representará sus páginas de búsqueda de manera diferente .

Por lo tanto, asegurarse de usar PhantomJS 2.x puede reducir las diferencias de renderizado que reportan muchas personas con respecto a los navegadores de escritorio.

Otra posibilidad interesante es SlimerJS . Sin embargo, todavía no lo tengo para que funcione de manera confiable.

Nunca he tenido problemas de confiabilidad con HtmlUnitDriver o PhantomJSDriver (la única molestia era un problema de incompatibilidad HttpClient 4.5 / HtmlUnit 2.17 ).

(En respuesta al comentario sobre la modificación de las solicitudes HTTP, yo personalmente recomendaría apegarme a la API de WebDriver y usar un proxy como BrowserMob para mutar las solicitudes y las respuestas en lugar de aprovechar las funciones específicas del navegador).

En general, desaconsejaría crear una herramienta o proceso que obligue a los usuarios a elegir un navegador sobre otro. Si es posible, permítales configurar o anular. Para la mayoría de los casos, me gustaría tener PhantomJS, ya que no te defraudará. Sin embargo, el rendimiento de HtmlUnit debe considerarse para las páginas más simples.

Ver también (quizás): http://www.guru99.com/selenium-with-htmlunit-driver-phantomjs.html y https://www.quora.com/Software-Testing/How-does-PhantomJS-compare-to-Selenium