Casperjs / PhantomJs vs Selenium

Nous utilisons Selenium pour automatiser nos tests d’ UI . Récemment, nous avons vu la majorité de nos utilisateurs utilisant Chrome. Nous voulions donc savoir – avantages et inconvénients de l’utilisation de PhantomJS vs Selenium:

  • Existe-t-il un réel avantage en termes de performance, par exemple le temps nécessaire pour exécuter les tests élémentaires?
  • Quand faut-il préférer PhantomJS à Selenium?

Ils attaquent des problèmes différents. PhantomJS s’exécutant parfaitement sur la ligne de commande, il convient comme première couche de test de fumée, que ce soit dans le cadre d’un stream de travail de développement et / ou dans un serveur d’continuous integration. Selenium cible plusieurs navigateurs et est donc très utile pour assurer la cohérence entre les navigateurs et effectuer des tests approfondis sur différents systèmes d’exploitation.

Si votre application Web doit s’exécuter sur divers navigateurs Web, l’exécution des tests de l’interface utilisateur uniquement avec PhantomJS ne produira pas le plus de couverture de test. Cependant, il est parfaitement acceptable de lancer PhantomJS et d’effectuer des vérifications de base avant de procéder aux tests approfondis. Imaginez la folie de tester une application financière où l’écran de connexion est involontairement cassé et non fonctionnel!

Notez que la ligne entre les deux devient légèrement floue avec la prise en charge récente de WebDriver dans la dernière version de PhantomJS. Il est maintenant possible d’exécuter rapidement les tests en premier en utilisant PhantomJS, puis (en supposant qu’il n’ya pas d’erreur grave), de continuer à exécuter les mêmes tests dans une configuration Selenium.

Avec l’intégration récente de WebDriver (comme Ariya l’a noté), vous pouvez maintenant utiliser Selenium pour piloter PhantomJS.

C’est extrêmement puissant.

Vous pouvez exécuter un ensemble de tests Selenium entièrement automatisés (en utilisant PhantomJS comme implémentation WebDriver) via votre CI sur un serveur Unix sans tête à chaque enregistrement. Ensuite, si vous souhaitez tester la compatibilité du navigateur, vous pouvez exécuter vos tests localement en modifiant l’implémentation WebDriver sous-jacente en Chrome, Firefox, etc.

Je suis en train d’écrire un framework d’extraction Web. J’ai 524 tests qui reçoivent des données de 250 sites Web en utilisant XPath. Initialement, le framework utilisait un parsingur HTML, HTMLCleaner, mais j’étudie actuellement l’utilisation de Selenium car je souhaite un support Javascript. J’ai effectué les tests sur les pilotes HtmlUnit, Chrome, Firefox et PhantomJS . Voici une comparaison du temps et du nombre d’échecs pour chaque approche:

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

Certains commentaires:

  • Dans certains cas, les “échecs” peuvent ne pas être des échecs du tout, il se peut que les extracteurs échouent car Javascript réécrit le DOM. Je suis en train d’parsingr les échecs pour trouver la cause.

  • Cela dit, HtmlUnit est le pilote Selenium le plus rapide, mais il est également peu fiable. Ce manque de fiabilité ne concerne pas seulement le Javascript, il y a des problèmes de traitement du HTML “désordonné, sale et réel” parce que quelque chose semble être cassé dans l’algorithme d’équilibrage des balises. Quelques problèmes ont été soulevés à ce sujet mais ils n’ont pas été corrigés – voir HTML-UNIT 1423 et HTML-UNIT 1046 .

  • Firefox est le pilote Selenium le plus lent, même si je désactive le chargement des images et les feuilles de style. C’est parce qu’il est le plus lent à charger et à initialiser, ce qui le rend considérablement plus lent que Chrome, et chaque fois qu’une extraction échoue, je dois recharger le pilote (dans les tests, je crée un pool de 5 pilotes pour réduire les délais de récupération des URL). les drivers web Selenium).

  • PhantomJS atteint une meilleure précision que Firefox, légèrement inférieure à Chrome, mais environ la moitié du temps de Firefox. De plus, je peux l’exécuter sur ma boîte de développement, cela ne “prend pas ma machine” en lançant plusieurs navigateurs pour que je puisse continuer à travailler.

Je recommande vivement PhantomJS.

Tirant parti de la puissance de Selenium et de PhantomJS, PhantomJS est doté de fonctionnalités de navigation sans tête, il est donc intéressant de l’utiliser comme l’un des navigateurs avec selenium (en plus des navigateurs traditionnels comme IE, Chrome, etc.)

  1. Peut être utilisé pour exécuter Sanity pour les applications Web dans CI (même si les machines des agents ne possèdent pas IE ou Chrome), les tests s’exécutent efficacement.
  2. Certaines équipes de développement utilisent cette approche pour obtenir des résultats rapides et consumr moins de temps et de ressources.
  3. La plus grande caractéristique de Phantom JS est la capture d’écran, qui exécute des tests parallèles utilisant des threads multiples, ce qui réduira énormément votre temps d’exécution.

défis que j’ai rencontrés en utilisant PhantomJS:

Mon application évaluait l’application Web:

  1. À certains moments, les localisateurs fonctionnant correctement sur les navigateurs chromés ne fonctionnent pas sur phantomJS.
  2. Parfois, en effectuant un double clic ou un clic contextuel par selenium, je dois vérifier que les opérations coz ne sont pas cliquées.
  3. Persistance du cache et des cookies. Une fois la déconnexion terminée, les données restnt connectées au cache. | Nous effectuons donc le test sur chrome.
  4. L’un des problèmes les plus importants que j’ai trouvé “Problème de téléchargement de fichier”. Nous ne pouvons pas télécharger un fichier dans le navigateur phantomJs dans notre application. Nous avons essayé beaucoup de choses javascriptexcutor, jqueries mais aucune ne fonctionnait du tout. Nous effectuons donc également ce test sur Chrome. Note: Nous avons beaucoup utilisé les fonctions javascript dans notre framework pour interagir avec l’élément web de PhantomJS. Une chose est sûre, le temps d’exécution est bien moindre dans PhantomJS. Donc, cela dépend de la priorité du client s’il veut que la fonctionnalité / la performance y aille. Si vous souhaitez tester le scénario de bout en bout, optez pour le chrome.