Tester votre app avec Protractor

Qu'est-ce que Protractor?

Protractor est un cadriciel de tests point à point (e2e ou End 2 End) qui permet de tester vos applications AngularJS. Protractor exécute vos tests dans un navigateur comme Firefox ou Chrome. Il permet d'interagir avec vos applications et de simuler le comportement d'un utilisateur.

 

tester avec protractor

L'avantage d'utiliser Protractor est qu'il est supporté par Google et qu'il n'est pas nécessaire d'ajouter des instructions sleep dans votre code afin d'attendre les réponses du serveur. L'attente est planifiée par Protractor (on parle de Automatic waitingsur le site de Protractor).

Installer et lancer Protractor

Installer Protractor

https://angular.github.io/protractor/#/

Installer Protractor globalement :

Lancer la commande suivant afin de vérifier l'installation :

Lancer l'outil webdriver-manager (fourni par Protractor) qui vous aide à mettre en place un serveur Selenium. Il télécharge et installe les outils nécessaires :

Lancer Selenium

* Selenium nécessite Java, voir les instructions plus bas pour l'installer.

Maintenant, lancer le serveur Selenium avec :

Cette commande lance un serveur Selenium et affiche les logs d'utilisation à l'écran. Les tests Protractor envoient les commandes à Selenium qui contrôle votre navigateur pour exécuter les tests et vérifier les résultats.

Des informations supplémentaires sur le serveur Selenium sont disponibles à l'adresse suivante :

Lancer vos tests

* Afin de pouvoir exécuter les commandes suivantes, un générateur Yo comme Angular-fullstack est nécessaire.

Vous pouvez lancer vos tests dans un autre terminal avec :

Une fois votre application lancée, exécuter vos tests Protractor :

Résolution de problèmes

Avant de lancer vos tests, assurez-vous que le serveur Selenium est fonctionnel et que votre application est disponible sur le port 9000.

Vous devez donc lancer :

Selenium nécessite Java

Afin de rouler Selenium, vous devez installer Java.

Sur Ubuntu, les commandes suivantes vous aideront :

Error: No selenium server jar found at the specified location (/home/username/fs3/node_modules/protractor/selenium/selenium-server-standalone-2.47.1.jar).

Afin de remédier à ce message d'erreur, supprimer le dossier node_modules/protractor de façon à utiliser la version globale et non locale de Protractor.

Tester avec PhantomJS et Protractor

Il est possible d'exécuter les tests avec PhantomJS, par contre, plusieurs bogues sont répertoriés. Il est donc recommandé d'utiliser Chrome ou Firefox.

Fichier de configuration Protractor

Le fichier protractor.conf.js contient les configurations pour Protractor.

Voici quelques éléments intéressants de la configuration :

Défini le navigateur à utiliser pour les tests avec capabilities :

Il est possible d'utiliser plusieurs navigateurs avec multiCapabilities :

Liste des fichiers à charger dans le navigateur. Si votre fichier test ne se trouve pas dans le dossier e2e, il ne sera pas exécuté.

Exemple de fichier de configuration minimale

Ce fichier identifie le nom du cadriciel de tests (Jasmine), l'adresse du serveur Selenium et le nom du fichier contenant les tests à exécuter.

Programmer vos tests avec Protractor

Sélecteurs disponibles

Afin d'interagir avec les éléments d'une page Web, vous devez tout d'abord les sélectionner grâce aux sélecteurs fournis par Protractor. Les sélecteurs vous permettront d'obtenir une référence vers les éléments d'intérêt.

by.css

Trouve un élément grâce à son sélecteur css.

Ex : by.css('btn-primary') pour trouver <a class="btn btn-primary">

by.id

Trouve un élément grâce à son id.

Ex : by.id('gobutton') pour trouver <button id="gobutton">

by.model

Trouve un élément avec l'attribut ng-model.

Ex : by.model('first') afin de trouver l'élément avec ng-model="first"

by.binding

Trouve un élément associé (binding) à une variable.

Ex : by.binding('latest') pour trouver l'élément lié à la variable latest {{latest}}

by.repeater

Trouve l'élément de répétition.

Ex : by.repeater('post in posts') pour trouver l'élément ng-repeat="post in posts"

En savoir plus

Afficher la documentation complète sur les Sélecteurs de Protractor.

Exemple de vérification d'un formulaire avec Protractor

Vérifier le titre d'une page

Un exemple tout simple qui vérifie le titre d'une page.

Vérifier le bon fonctionnement d'un formulaire

L'exemple suivant vérifie le bon fonctionnement d'un formulaire. On s'assure que le message d'erreur est bien caché initialement, on complète le champ courriel avec un courriel invalide, on clique sur le bouton soumettre et on vérifie que le message de courriel invalide est bien présenté à l'utilisateur.

Voici le détail de quelques fonctions bien utiles pour automatiser le navigateur avec Protractor :

  • isDisplayed : retourne true si l'élément est visible.
  • sendKeys : envoi des caractères dans le champ spécifié.
  • click : clique sur un élément du formulaire.

Envoyer des touches et cliquer

Vérifier le contenu d'un élément d'un répéteur

Le sélecteur by.repeater vous retourne un callback (méthode then) sur un tableau des éléments de votre boucle. Vous pouvez ainsi accéder aux objets du tableau et y faire les vérifications nécessaires.

Vérifier le nombre d'éléments d'un répéteur avec count( )

Tout sur les répéteurs

https://angular.github.io/protractor/#/api?view=ProtractorBy.prototype.repeater

Glossaire

Spec : Une spécification à tester. Comprend une ou plusieurs suites de tests. Devrait couvrir tous les comportements voulus.

Suite de tests : Groupe de tests identifié par un bloc describe avec Jasmine.

Test : Instructions de tests avec une ou plusieurs vérifications (expect). Identifié par le bloc it avec Jasmine.

Valeur actuelle : Valeur actuelle dans l'application sous test.

Valeur attendue : La valeur attendue qui sera comparée à la valeur actuelle dans vos tests.

Comparateur (matcher) : Une fonction qui permet de comparer la valeur actuelle et la valeur attendue. Elle retourne une valeur booléenne. Exemples avec Jasmine : toEqual, toBeGreatherThan, toHaveBeenCalledWith.

Compléments

Explorateur d'éléments

L'explorateur d'éléments fourni avec Protractor.

Mise en attente avec sleep( )

Si vous voulez ralentir l'exécution d'une instruction, vous pouvez utiliser la méthode sleep de l'objet browser.

Déboguer avec debugger( )

Il est possible d'ajouter l'instruction suivante pour vous aider à déboguer vos tests. Vous devrez lancer Protractor en mode debug.

Ensuite :

Tester dans le nuage

Il peut être intéressant de noter qu'il est possible d'exécuter ces tests automatisés dans le nuage avec SauceLabs et BrowserStack.

Exercice Protractor

  • Configurer et installer Protractor.
  • Écrire votre premier test.
  • Lancer votre test et s'assurer qu'il est exécuté avec succès.

Références

Protractor/docs at master · angular/protractor

https://github.com/angular/protractor/tree/master/docs

Protractor tutorial - end to end testing for AngularJS

http://www.protractortest.org/#/tutorial

Comments

comments

0 réponses

Laisser un commentaire

Participez-vous à la discussion?
N'hésitez pas à contribuer!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.