web-dev-qa-db-fra.com

Casperjs / PhantomJs vs Selenium

Nous utilisons Selenium pour automatiser nos tests UI. Récemment, nous avons vu la majorité de nos utilisateurs utiliser Chrome. Nous voulions donc connaître les avantages et les inconvénients de l’utilisation de PhantomJS vs Selenium:

  • Existe-t-il un avantage réel en termes de performances, par exemple le temps pris pour exécuter les cas de test?
  • Quand faut-il préférer PhantomJS au sélénium?
147
spirit3189

Ils s'attaquent à différents problèmes. Etant donné que PhantomJS fonctionne parfaitement sur la ligne de commande, il convient en tant que première couche de test de fumée, que ce soit dans le cadre d’un flux de travail de développement et/ou dans un serveur d’intégration continue. Selenium cible plusieurs navigateurs. Il est donc très utile d’assurer la cohérence entre les navigateurs et de réaliser des tests approfondis sur différents systèmes d’exploitation.

Si votre application Web doit être exécutée sur divers navigateurs Web, l'exécution du test d'interface utilisateur uniquement avec PhantomJS ne fournira pas la plus grande couverture de tests. Cependant, il est parfaitement approprié de lancer PhantomJS et d’exercer des vérifications de base avant de faire les tests approfondis. Imaginez la folie de tester une application financière où l'écran de connexion est involontairement brisé et non fonctionnel!

Notez que la ligne entre les deux devient légèrement floue avec la récente prise en charge de WebDriver dans le dernier PhantomJS. Il est maintenant possible d'exécuter rapidement les tests en utilisant d'abord PhantomJS, puis (en supposant qu'aucune erreur sérieuse ne soit rencontrée) de continuer à exécuter les mêmes tests de manière approfondie dans une configuration Selenium.

180
Ariya Hidayat

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

C'est immensément puissant.

Vous pouvez exécuter un ensemble de tests Selenium entièrement automatisés (en utilisant PhantomJS en tant qu’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.

49
mekondelta

J'écris actuellement un framework d'extraction web. J'ai 524 tests qui obtiennent des données de 250 sites Web utilisant XPath. Initialement, le framework utilisait un analyseur HTML, HTMLCleaner, mais je suis en train d’envisager l’utilisation de Selenium parce que je veux un support Javascript. J'ai exécuté les tests sur HtmlUnit, Chrome, Firefox et pilotes PhantomJS . Voici une comparaison du temps pris 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 du tout des échecs, il se peut que les extracteurs échouent car Javascript est en train de réécrire le DOM. Je suis en train d'analyser les échecs pour trouver la cause.

  • Cela dit, HtmlUnit est le pilote Selenium le plus rapide, mais il n’est pas fiable non plus. Cette non-fiabilité ne concerne pas seulement le Javascript, il y a des problèmes de traitement du code HTML "en désordre, sale, du monde réel", car 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é résolus - voir HTML-UNIT 142 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. En effet, le chargement et l’initialisation sont les plus lents, ce qui le rend beaucoup plus lent que Chrome. 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 pilotes Web Selenium).

  • PhantomJS obtient une meilleure précision que Firefox, légèrement inférieure à celle de Chrome, mais environ deux fois plus rapide que Firefox. De plus, je peux l'exécuter sur ma boîte de dev, cela ne "prend pas ma machine" en lançant plusieurs navigateurs pour que je puisse continuer à travailler.

Je recommande fortement PhantomJS.

41
Mark Butler

Exploiter la puissance de Sélénium et de PhantomJS PhantomJS possède les capacités de navigateur sans en-tête, il est donc bon de l'utiliser comme l'un des les navigateurs avec Selenium (En plus des navigateurs traditionnels comme IE, Chrome etc.,),) Avantages de cette approche:

  1. Peut être utilisé pour effectuer Sanity pour les applications Web dans CI (même si les machines de l'agent n'ont pas IE ou chrome), les tests seront exécutés efficacement.
  2. Certaines équipes de développement utilisent cette approche pour obtenir des résultats rapides tout en consommant moins de temps et de ressources.
  3. La fonctionnalité la plus importante de Phantom JS est la capture d’écran, qui exécute des tests parallèles en utilisant le multi-threading, ce qui réduira considérablement votre temps d’exécution.
2
Muthu ragavendra

défis rencontrés lors de l’utilisation de PhantomJS:

Mon application tarifait l'application Web:

  1. À un moment donné, les localisateurs qui fonctionnaient correctement sur le navigateur chrome ne fonctionnent pas sur phantomJS.
  2. Parfois, lorsque vous effectuez un double clic ou un clic contextuel avec Selenium, je dois effectuer une vérification supplémentaire pour vérifier les opérations car, au premier abord, il ne s'agit pas de cliquer.
  3. Cache et persistance des cookies. Après avoir déconnecté puis connecté, les données restent en cache. | Nous effectuons donc le test sur chrome.
  4. L'un des problèmes les plus importants que j'ai trouvé est "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 d’elles n’a fonctionné du tout. Nous effectuons donc également ce test sur Chrome. Remarque: nous avons largement utilisé les fonctions javascript dans notre infrastructure pour interagir avec l'élément Web de PhantomJS. Une chose est sûre que le temps d’exécution est très inférieur à PhantomJS. Cela dépend donc de la priorité du client s’il souhaite la fonctionnalité/la performance. Si vous souhaitez tester le scénario de bout en bout, optez pour chrome.
1
Vaibhav_Sharma