rails capybara phantomjs capybara-webkit poltergeist

rails - ¿Cómo difieren Poltergeist/PhantomJS y capybara-webkit?



capybara rails 5 (4)

  1. ¿Cuáles son las diferencias entre PhantomJS y capybara-webkit?
  2. ¿Cuáles son las ventajas de capybara-webkit sobre PhantomJS?
  3. ¿Cuál de los dos es la herramienta más eficiente?
  4. Otros ...

PhantomJS no es compatible con funciones HTML5 como Audio / Video que realmente apesta.


TL; DR

  • Poltergeist / PhantomJS es más fácil de configurar
  • Poltergeist / PhantomJS tiene menos dependencias
  • Capybara-webkit es más estable y confiable y es mejor para CI

Largo:

He estado usando Poltergeist + PhantomJS por más de un año. Mi proyecto más grande tiene muchas llamadas de Ajax, cargas de archivos, manipulaciones de imágenes, plantillas de JS y animaciones de CSS3.

De vez en cuando, Poltergeist y PhantomJS generaban errores aleatorios.

Algunos de ellos fueron mis errores. Probar Ajax es complicado. Un error común fue que al final de la prueba exitosa la gema database_cleaner truncó la base de datos, sin embargo, una llamada Ajax aún se estaba ejecutando y generó una excepción en el controlador debido a la base de datos vacía. Esto no siempre es fácil de solucionar, a menos que desee usar sleep (). (Yo no).

Sin embargo, muchos errores con Poltergeist no fueron mis errores. Tengo una prueba que hace lo mismo 30 veces (por una buena razón) y de vez en cuando 1 de las 30 veces no funcionó. Poltergeist no hizo clic en el botón en absoluto. Era un botón normal visible, no animado. Podría arreglarlo (al hacer clic de nuevo), sin embargo, es un truco feo y se siente mal.

A veces, el script que funcionaba en todos los navegadores generaba errores aleatorios de javascript con Poltergeist / PhantomJS. Aproximadamente 1 o 2 de 100 veces.

Con dos plugins de carga de Ajax diferentes, he experimentado que PhantomJS 1.9 y 2.0 se comporta de manera diferente. 2.0 es más estable y consistente, pero está lejos de ser perfecto.

Esto fue un gran dolor con Jenkins. Aproximadamente cada tercera ejecución fue un fracaso porque 1 o 2 de las 400 funciones (pruebas de navegador js) generaron errores aleatorios.

Hace dos semanas probé Capybara-webkit. Me llevó un par de horas migrar, ya que tratan los elementos invisibles de forma diferente. Capybara-webkit es más correcto o estricto en esto. Noté lo mismo sobre elementos superpuestos.

Probar la carga de Ajax y la manipulación de imágenes requiere scripts personalizados que tuve que modificar para Capybara-webkit.

Estoy usando Mac OS X para desarrollo, FreeBSD para producción y Linux para Jenkins. Capybara-webkit fue más complicado de configurar que Poltergeist porque requiere una pantalla y tiene muchas dependencias. Solo PhantomJS es realmente sin cabeza e independiente. Podría ejecutar PhantomJS en servidores de producción si quisiera. No haría eso con capybara-webkit debido a las dependencias.

Ahora tengo Jenkins CI 100% estable. Todos los errores aleatorios de javascript son recuerdos del pasado. Capybara-webkit siempre hace clic en el botón en el que quiero que haga clic. Javascript siempre funciona bien. Actualmente tengo alrededor de 20-25 versiones estables en línea recta.

Para proyectos con mucho Ajax, recomiendo capybara-webkit.

Mi consejo se basa en las versiones actuales y actualizadas de agosto de 2015.


capybara-webkit y PhantomJS usan Webkit bajo el capó para renderizar páginas web sin cabeza, es decir, sin la necesidad de un navegador. Sin embargo, son herramientas diferentes:

  • capybara-webkit sirve como un adaptador para Capybara, una gema de Ruby que te permite escribir y realizar pruebas de UI de alto nivel para una aplicación Rails o Rack.
  • PhantomJS es una herramienta de nivel inferior que simplemente le permite ejecutar scripts contra una página web. También se puede usar para escribir pruebas de UI (ver Casper , por ejemplo, o cualquiera de las otras herramientas de prueba que se basan en PhantomJS).

poltergeist es el controlador de capibaras para PhantomJS, un navegador sin cabeza que se basa en WebKit. capybara-webkit es un controlador de capibara que usa WebKit directamente.

poltergeist / PhantomJS tiene algunas grandes ventajas sobre capybara-webkit: