Étape 6: Conseils et astuces
- Débogage :
- Activer la journalisation au niveau du pilote pour plus de débogage et à créer des journaux.
- La valeur logLevel à « verbose »
- LogOutput la valeur nom de répertoire (« logs »)
- Activer la journalisation au niveau du pilote pour plus de débogage et à créer des journaux.
// load the driver for browser driver = webdriverio.remote({ desiredCapabilities: {browserName: process.env.SELENIUM_BROWSER || 'chrome'} });
- Utilisez console.log(), debug(), getText() pour déboguer.
- Console.log() - permet d’afficher les informations pour déterminer l’État.
- Debug() - utilisation pause/script du navigateur jusqu'à ce que vous appuyez sur entrée sur la ligne de commande.
- getText() - permet de vérifier que vous êtes en interaction avec l’élément correct.
- Particulièrement utile avec des expressions xpath.
// reusable code - library<br> // code snippet if(bp == "DESKTOP") { obj.width = 1200; obj.height = 600; obj.name = bp; } else if(bp == "TABLET") { obj.width = 992; obj.height = 600; obj.name = bp; } else if(bp == "MOBILE") { obj.width = 768; obj.height = 400; obj.name = bp; }
- Variable d’environnement permet de modifier le navigateur dynamiquement :
- Variable d’environnement SELENIUM_BROWSER permet d’invoquer un autre navigateur sans modifier le script de test chaque fois.
- Nécessite une légère modification de codage à l’appui.
Modifications du code :
// Test script before( function(done) { winsize = common.getWindowSizeParams(); ... driver.addCommand('setWindowSize', common.setWindowSize.bind(driver)); } // set the window size it('should set window size', function (done) { // only the width matters driver.setWindowSize(winsize.width, winsize.height, function () {}).call(done); });
Navigateurs pris en charge :
- Internet Explorer - IE 8 + (Windows uniquement)
- SELENIUM_BROWSER = c’est à dire moka
- Firefox 10 + (Max/Windows/Linux)
- SELENIUM_BROWSER = firefox moka
- Chrome 12 + (Max/Windows/Linux)
- SELENIUM_BROWSER = chrome moka
- Opera 12 +
- SELENIUM_BROWSER = moka opéra
- Safari
- SELENIUM_BROWSER = moka safari
Test :
- Pour Windows utiliser git bash shell :
- SELENIUM_BROWSER = chrome moka
- $ SELENIUM_BROWSER = chrome moka DynamicBrowser.js
- Pour Mac ou Linux, ouvrez terminal :
- SELENIUM_BROWSER = chrome moka
- $ SELENIUM_BROWSER = chrome moka DynamicBrowser.js
- Tests adaptés :
- Déterminer les points d’arrêt basés sur le projet ou le cadre (c’est à dire « bootstrap »).
- Définir les variables d’environnement pour chaque point d’arrêt :
- Ordinateur de bureau - 1200 px
- TABLETTE - 992 px
- MOBILE - 768 px
- Développer une commande réutilisable pour lire la variable d’environnement et de définir la taille du navigateur.
- Voir l’exemple ci-dessous.
- Appelez la commande réutilisable dans votre script de test.
// verifyLastNameCheckError() // // Description: // Verifies the last name form validation error message // // Input: // number - index of error (1-5) // Output: // none // var verifyLastNameCheckError = function () { var idx = arguments[0], callback = arguments[arguments.length - 1]; this .getText("//ul[ alert-danger']/li[" + idx + "]", function(err, e) { console.log('Error found: ' + e); (e).should.be.equal('Please enter last name'); }) .call(callback); }; // export the function module.exports.verifyLastNameCheckError = verifyLastNameCheckError;
// require the reusable command - CommonLib common = require('./Common/CommonLib'); ... // bind the commands driver.addCommand('verifyFirstNameError', common.verifyFirstNameCheckError.bind(driver)); driver.addCommand('verifyLastNameError', common.verifyLastNameCheckError.bind(driver)); it('should contain 2 errors: first/last name', function () { // call the reusable function driver .verifyFirstNameError(1); .verifyLastNameError(2); });
- Commandes réutilisables (commandes personnalisées) :
- Web Driver IO est facilement extensible.
- J’aimerais mettre toutes les commandes réutilisables dans une bibliothèque. (peut-être que c’est la vieille école, mais ça marche!)
common/commonLib.js
// Set/verify first/last name using Callback it('should set/verify first/last name using Callbacks', function (done) { driver.setValue("#fname", "Tony", function (e) { driver.getValue("#fname", function (err, e) { (e).should.be.equal("Tony"); console.log("First Name: " + e); driver.setValue("#lname", "Keith", function (e) { driver.getValue("#lname", function (err, e) { (e).should.be.equal("Keith"); console.log("Last Name: " + e); done(); }); }); }); }); });
Voici les changements spécifiques nécessaires pour appeler une fonction réutilisable
Voir formFieldValidation.js pour exemple de travail complet
// Set/verify first/last name using Promises it('should set/verify first/last name using Promises', function () { return driver.setValue("#fname", "Tony") .getValue("#fname").then( function (e) { (e).should.be.equal("Tony"); console.log("First Name: " + e); }) .setValue("#lname", "Keith") .getValue("#lname").then( function (e) { (e).should.be.equal("Keith"); console.log("Last Name: " + e); }); });
- Structure de fichier/répertoire de projet :
- Voici la structure du projet typique :
- « Projet » - répertoire de projet principal
- README.md - fichier Lisez-moi pour le projet global
- « Commun » - répertoire pour les fonctions globales communes à tous les projets
- common-lib.js - bibliothèque de fonctions globales
- README.md - fichier Lisez-moi pour les fonctions globales
- « Produit1 » - répertoire de produit 1
- test-script1.js
- test-script2.js
- « Commun » - répertoire pour les fonctions locales à 1 du projet
- prod1-lib.js - bibliothèque de fonction locale pour projet 1
- README.md - fichier Lisez-moi pour les fonctions locales à 1 du projet
- « Produit2 » - répertoire de produits 2test-script1.jstest-script2.js
- « Commun » - répertoire pour les fonctions locales au projet 2
- prod2-lib.js - bibliothèque de fonction locale pour projet 2
- README.md - fichier Lisez-moi pour les fonctions locales au projet 2
- « Commun » - répertoire pour les fonctions locales au projet 2
- « Projet » - répertoire de projet principal
- Voici la structure du projet typique :
- Percer plusieurs fichiers de scripts de test :
- Voici un exemple de l’utilisation de plusieurs fichiers :
- Test de validation - script de test de base pour vérifier que tout fonctionne
- Public static Element et Validation du texte - vérifier tous les éléments et le texte
- Validation de formulaire/Page erreur - erreur de validation
- Résultat de recherche - contenu dynamique test
- Voici un exemple de l’utilisation de plusieurs fichiers :
- Rappels de VS. Promesses :
- Version 3 de IO pilote Web prend en charge les rappels et les promesses.
Les promesses sont la méthode préférée car elle réduit la gestion des erreurs
code. S’il vous plaît voir ci-dessous l’exemple même écrit à l’aide de rappels et promesses.
- Version 3 de IO pilote Web prend en charge les rappels et les promesses.
Rappels
Promesses