chrome google-chrome user-interface selenium automation phantomjs

google-chrome - chrome - selenium phantomjs c#



Casperjs/PhantomJs vs Selenium (5)

Actualmente estoy escribiendo un marco de extracción web. Tengo 524 pruebas que obtienen datos de 250 sitios web usando XPath. Inicialmente, el framework usaba un analizador HTML, HTMLCleaner, pero actualmente estoy investigando el uso de Selenium porque quiero el soporte de Javascript. He realizado las pruebas contra los controladores HtmlUnit, Chrome, Firefox y PhantomJS . Aquí hay una comparación del tiempo y el número de fallas para cada enfoque:

Failures Time (secs) HtmlCleaner 0 82 HtmlUnit 169 102 Google Chrome 38 562 Firefox 46 1159 PhantomJS 40 575

Algunos comentarios:

  • En algunos casos, las "fallas" pueden no ser ninguna falla, es posible que los extractores estén fallando porque Javascript está reescribiendo el DOM. Estoy en el proceso de analizar las fallas para encontrar la causa.

  • Dicho esto, HtmlUnit es el controlador de Selenium más rápido, pero tampoco es confiable. Esta falta de fiabilidad no solo concierne a Javascript, hay problemas al procesar HTML "desordenado, sucio, del mundo real" porque algo parece estar roto en el algoritmo de equilibrio de etiquetas. Se han planteado algunas cuestiones al respecto, pero no se han solucionado; consulte HTML-UNIT 1423 y HTML-UNIT 1046 .

  • Firefox es el controlador de Selenium más lento, aunque estoy desactivando la carga de imágenes y las hojas de estilo. Esto se debe a que es el más lento de cargar e inicializar, lo que lo hace considerablemente más lento que Chrome, y cada vez que falla una extracción necesito volver a cargar el controlador (en las pruebas creo un grupo de 5 controladores para mitigar los retrasos de recuperación de URL para todos los controladores web Selenium).

  • PhantomJS logra una mayor precisión que Firefox, ligeramente inferior a Chrome, pero en la mitad del tiempo de Firefox. Además, puedo ejecutarlo en mi cuadro de desarrollo, no "controlar mi máquina" iniciando múltiples navegadores para que pueda seguir trabajando.

Yo recomendaría PhantomJS.

Estamos usando Selenium para automatizar nuestras pruebas de UI . Recientemente, hemos visto a la mayoría de nuestros usuarios usar Chrome. Así que queríamos saber: pros y contras del uso de PhantomJS vs Selenium:

  • ¿Hay alguna ventaja real en términos de rendimiento, por ejemplo, el tiempo necesario para ejecutar los casos de prueba?
  • ¿Cuándo debería uno preferir PhantomJS sobre Selenio?

Con la reciente integración de WebDriver (como señaló Ariya), ahora puede usar Selenium para controlar PhantomJS.

Esto es inmensamente poderoso.

Puede ejecutar un conjunto de pruebas de Selenium totalmente automatizadas (utilizando PhantomJS como la implementación de WebDriver) a través de su CI en un servidor Unix sin cabeza en cada check-in. Luego, si desea probar la compatibilidad del navegador, puede ejecutar las pruebas localmente cambiando la implementación subyacente de WebDriver a Chrome, Firefox, etc.


Están atacando diferentes problemas. Como PhantomJS funciona perfectamente en la línea de comandos, es adecuado como la primera capa de prueba de humo, ya sea como parte del flujo de trabajo de desarrollo y / o en un servidor de integración continua. El selenio se dirige a múltiples navegadores y, por lo tanto, es muy útil para garantizar la coherencia entre navegadores y realizar pruebas exhaustivas en diferentes sistemas operativos.

Si su aplicación web necesita ejecutarse en una variedad de navegadores web, ejecutar la prueba de UI solo con PhantomJS no proporcionará la mayor cobertura de prueba. Sin embargo, está perfectamente bien lanzar PhantomJS y realizar algunos controles básicos de cordura antes de realizar las pruebas en profundidad. ¡Imagínese la locura de probar una aplicación financiera donde la pantalla de inicio de sesión se rompe accidentalmente y no funciona!

Tenga en cuenta que la línea entre los dos se vuelve un poco borrosa con el reciente soporte de WebDriver en el último PhantomJS. Ahora es posible ejecutar rápidamente las pruebas primero con PhantomJS y luego (suponiendo que no se haya producido un error grave) continuar ejecutando las mismas pruebas exhaustivamente en una configuración de Selenium.


Aprovechando el poder de ambos Selenium y PhantomJS PhantomJS tiene las capacidades del navegador sin cabeza, por lo tanto, es bueno usarlo como uno de los navegadores con selenio (además de los navegadores tradicionales como IE, Chrome, etc.). Ventajas de este enfoque:

  1. Se puede usar para hacer Sanity para aplicaciones web en CI (aunque las máquinas de agentes no tengan IE o Chrome) las pruebas se ejecutarán de manera efectiva.
  2. Algunos equipos de desarrollo utilizan este enfoque para obtener resultados rápidos y consume menos cantidad de tiempo y recursos.
  3. La característica más importante de JS fantasma es la captura de pantalla, ejecutando pruebas paralelas utilizando multi-threading, lo que reducirá enormemente el tiempo de ejecución.

desafíos que enfrenté al usar PhantomJS:

Mi aplicación estaba valorando la aplicación web:

  1. En algún punto, los localizadores que funcionaban bien en el navegador Chrome no funcionan en phantomJS.
  2. A veces, al hacer doble clic o hacer clic en el contexto por selenio, tengo que poner una verificación adicional para verificar las operaciones porque en el primer lugar no hace clic.
  3. La persistencia de caché y cookies. Después de cerrar sesión y luego iniciar sesión, los datos permanecen en la memoria caché. | Entonces realizamos la prueba en cromo.
  4. Uno de los problemas más importantes que encontré fue "Problema de carga de archivos". No podemos cargar un archivo en el navegador phantomJs en nuestra aplicación. Probamos muchas cosas javascriptexcutor, jqueries pero ninguna de ellas funcionó en absoluto. Entonces también realizamos esta prueba en Chrome. Nota: Usamos funciones de JavaScript extensamente en nuestro framework para interactuar con el elemento web para PhantomJS. Una cosa es segura de que el tiempo de ejecución es muy inferior en PhantomJS. Por lo tanto, depende de la prioridad del cliente si quiere Funcionalidad / Rendimiento y luego lo acepta. Si desea probar un escenario de extremo a extremo, vaya a Chrome.