poltergeist est le pilote capybara de PhantomJS, un navigateur sans navigateur basé sur WebKit. capybara-webkit est un pilote capybara qui utilise directement WebKit.
poltergeist/PhantomJS a de gros avantages sur capybara-webkit:
TL; DR
Longue:
J'utilise Poltergeist + PhantomJS depuis plus d'un an. Mon plus grand projet a beaucoup d'appels Ajax, de téléchargements de fichiers, de manipulations d'images, de modèles JS et d'animations CSS3 pures.
De temps en temps, Poltergeist et PhantomJS généraient des erreurs aléatoires.
Certaines étaient mes erreurs. Tester Ajax est délicat. Une erreur courante était qu'à la fin du test, la gem database_cleaner tronçonnait la base de données. Cependant, un appel Ajax était toujours en cours d'exécution et une exception générée dans le contrôleur en raison de la base de données vide. Ce n’est pas toujours facile à résoudre, sauf si vous voulez utiliser sleep (). (Non).
Cependant, de nombreuses erreurs avec Poltergeist n'étaient pas mes erreurs. J’ai un test qui fait la même chose 30 fois (pour une bonne raison) et de temps en temps, 1 fois sur 30, cela ne fonctionne pas. Poltergeist n'a pas cliqué sur le bouton du tout. C'était un bouton visible, non animé, normal. Je pourrais le réparer (en cliquant dessus à nouveau), cependant, c’est un vilain bidouillage qui donne l’impression de se tromper.
Parfois, le script qui fonctionnait dans tous les navigateurs générait des erreurs javascript aléatoires avec Poltergeist/PhantomJS. Environ 1 ou 2 fois sur 100.
Avec deux plugins de téléchargement différents Ajax, j'ai constaté que PhantomJS 1.9 et 2.0 se comportaient différemment. La version 2.0 est plus stable et cohérente mais elle est loin d’être parfaite.
C'était une douleur énorme avec Jenkins. À peu près toutes les trois exécutions ont échoué car 1 ou 2 des 400 fonctionnalités (tests du navigateur js) ont généré des erreurs aléatoires.
Il y a deux semaines, j'ai essayé Capybara-webkit. Il m'a fallu quelques heures pour migrer car ils traitent les éléments invisibles différemment. Capybara-webkit est plus correct ou strict à cet égard. J'ai remarqué la même chose sur les éléments qui se chevauchent.
Tester le téléchargement et la manipulation d'images Ajax nécessite des scripts personnalisés que j'ai dû modifier pour Capybara-webkit.
J'utilise Mac OS X pour le développement, FreeBSD pour la production et Linux pour Jenkins. Capybara-webkit était plus compliqué à configurer que Poltergeist car il nécessite un écran et comporte de nombreuses dépendances. Seul PhantomJS est véritablement autonome et sans tête. Je pourrais exécuter PhantomJS sur des serveurs de production si je le voulais. Je ne le ferais pas avec capybara-webkit à cause des dépendances.
Maintenant, j'ai un Jenkins CI stable à 100%. Toutes les erreurs javascript aléatoires sont des souvenirs du passé. Capybara-webkit clique toujours sur le bouton sur lequel je veux cliquer. Javascript fonctionne toujours bien. Actuellement, j'ai environ 20-25 versions stables en ligne droite.
Pour les projets avec beaucoup d’Ajax, je recommande capybara-webkit.
Mon conseil est basé sur les versions actuelles et à jour en août 2015.
capybara-webkit et PhantomJS utilisent tous deux Webkit sous le capot pour rendre les pages Web sans tête, c’est-à-dire sans recourir à un navigateur. Ce sont des outils différents, cependant:
PhantomJS ne prend pas en charge les fonctionnalités HTML5 telles que l’audio/vidéo qui est vraiment nul.