Hacks Selenium pour les débutants
De Wilhelm Haaker
15 octobre 2019
7 min lire
Si vous recherchez une feuille de triche Selenium pour vous lancer dans les tests Web Selenium, voici une ventilation riche en expérience de la façon de démarrer avec Selenium.
Aller à la section
Au cours de mon expérience d'apprentissage Selenium, j'ai découvert quelques trucs et astuces pour commencer. Voici quelques ressources intéressantes qui pourraient également vous aider.
J'ai récemment appris à utiliser Selenium, grâce au nouveau produit de Parasoft pour les testeurs Selenium, Parasoft Sélénic. J'avais déjà une certaine expérience des tests Web, de l'écriture de code Java et de JUnit, mais je n'avais jamais utilisé Selenium auparavant. Voici quelques ressources utiles que j'ai trouvées utiles pour la montée en puissance.
Qu'est-ce que le sélénium ?
La première chose à faire est de vous assurer que vous comprenez la différence entre Sélénium IDE et Pilote Web Selenium. J'avais pensé que Selenium IDE, un programme d'enregistrement / lecture GUI construit sur Selenium WebDriver, serait un excellent moyen de commencer, mais je me suis rapidement retrouvé à rencontrer des limitations où la lecture échouait avec des localisateurs défectueux / manquants, et j'ai réalisé que tout testeur Selenium sérieux écrit du code à l'aide du Selenium WebDriver. Les dés étaient jetés, je devais commencer à écrire du code.
Premiers pas avec Selenium WebDriver
Les bibliothèques Selenium WebDriver sont disponibles pour plusieurs langues différentes, ce qui rend Selenium accessible à un large public. Comme je suis le plus à l'aise pour écrire du code en Java, je suis resté fidèle à cela. (De plus, bien que JUnit ne soit pas requis pour les tests Selenium en Java, je ne vois pas pourquoi personne ne l'utiliserait, car il est livré avec un tas de fonctionnalités spécifiquement conçues pour écrire des cas de test en Java.)
Enfin, si j'allais écrire des JUnits, alors je me suis dit que je pourrais aussi bien les écrire dans un IDE. Il existe deux IDE qui sont principalement utilisés dans l'industrie pour Java: Eclipse et IntelliJ. La majeure partie de ma carrière a consisté à utiliser Eclipse, donc je suis resté fidèle à cela.
Ayant pris ces décisions, j'étais prêt à commencer.
Compétences à connaître pour le sélénium
Avant de commencer, assurez-vous de disposer de certaines compétences préalables pour vous familiariser avec les bases de l'automatisation des tests.
Compétences Web
Familiarité avec HTML et CSS: Vous ne devriez pas avoir peur de la source de la page d'un site Web et vous devez comprendre comment la source de la page se traduit par ce que vous voyez rendu dans le navigateur. Si le HTML vous est totalement étranger, alors je vous suggère une formation de base. Voici un excellent site Web qui m'a aidé dans mes premières études sur le Web:
Outils de développement du navigateur et XPath: Une autre compétence fondamentale consiste à comprendre comment localiser des éléments sur une page. Selenium WebDriver prend en charge plusieurs mécanismes pour ce faire, auxquels vous serez bientôt exposé. Vous voudrez vous familiariser avec les outils de développement du navigateur pour localiser des éléments sur une page, et voici un excellent tutoriel pour vous mettre à jour avec Chrome:
Compétences de codage
Si vous cherchez à faire la transition vers un rôle d'ingénieur en automatisation des tests, vous devrez développer des compétences en codage. Avant de paniquer, la bonne nouvelle est que l'écriture de code pour automatiser les tests Web dans Selenium est relativement facile. En fait, je pense que Selenium est un excellent moyen d'apprendre le codage; le code que vous allez écrire est étroitement limité, vous êtes donc moins susceptible d'être totalement submergé. Il ne devrait pas être difficile de trouver des didacticiels et des leçons gratuits pour vous familiariser avec la langue de votre choix. Dans le but d'apprendre ce que vous devez savoir sur Selenium, j'ai trouvé un tutoriel fantastique qui couvre Java et Selenium pour un débutant total:
Si vous choisissez Java, je vous recommande également d'apprendre JUnit, qui est un cadre de test populaire pour Java. Voici un excellent tutoriel qui couvre JUnit ET la dernière leçon couvre l'application de JUnit avec les tests Selenium:
Configuration de votre environnement
Outre le didacticiel de toolsqa, une autre ressource que je me suis retrouvée fréquentée était la suivante:
Ces deux ressources couvriront tous les sujets nécessaires à la configuration de votre environnement avec Eclipse, Java, JUnit 4, Selenium WebDriver et Maven.
… Maven? Qu'est-ce que c'est? Un commentaire que je ferai est que la plupart des didacticiels que j'ai trouvés placent Maven comme sujet avancé plus bas dans la liste. Maven est un outil de construction qui facilite la compilation, le test et le déploiement de code avec toutes les dépendances requises. Comme JUnit, Maven est un autre élément facultatif, mais je veux l'évoquer maintenant car il facilite la configuration de votre projet une fois que vous savez quoi faire. Si vous commencez avec Maven, vous n'aurez pas à penser à convertir votre projet Java en un projet Maven plus tard, commencez simplement avec Maven depuis le début! Le tutoriel que j'ai le plus aimé pour cela était de:
Votre premier script Selenium
Les deux références de didacticiel que j'ai mentionnées font du bon travail en vous guidant dans la création de votre premier script. L'article toolsqa suppose moins de connaissances en codage et le lien softwaretestinghelp.com couvre plus de terrain, mais ils sont tous les deux excellents :
- www.toolsqa.com/selenium-webdriver/run-selenium-test/
- www.softwaretestinghelp.com/selenium-webdriver-tutorial-10/
Une fois que vous avez installé votre premier script et que vous êtes au courant de JUnit, la dernière leçon du didacticiel JUnit de toolsqa vous aidera à refactoriser vos scripts initiaux au format JUnit:
Le modèle d'objet de page dans Selenium
Une fois que vous vous êtes familiarisé avec les bases de Selenium et que vous avez un script qui lit un scénario ou deux dans votre navigateur, vous devriez être prêt à passer au niveau suivant. Le modèle d'objet de page est un moyen d'organiser votre code de test Selenium pour le rendre plus maintenable et réduire le code en double. Mes tests jusqu'à ce point avaient tout le code de test contenu dans ma méthode de test. J'ai donc suivi un processus en 2 étapes, d'abord refactoriser mon test existant vers le modèle d'objet de page, puis le refactoriser à nouveau pour l'optimiser avec le modèle Page Factory. C'était un processus instructif en 2 étapes et je ne peux qu'imaginer à quel point je le regretterais si je sautais ces meilleures pratiques et que je me suis lancé dans la création test après test. Vous pouvez le faire automatiquement si vous utilisez l'enregistreur intelligent Parasoft Sélénic. Voici quelques guides que j'ai utilisés pour me renseigner sur le sujet:
- www.guru99.com/page-object-model-pom-page-factory-in-selenium-ultimate-guide.html
- www.swtestacademy.com/page-factory-selenium-webdriver/
Si cela semble être du travail supplémentaire et du code supplémentaire pour le même résultat, vous avez raison. Et si vous n'avez qu'un ou deux tests, c'est peut-être exagéré, mais ce n'est jamais le cas pour un ingénieur en automatisation de tests. Ce modèle finit par prendre tout son sens dans le monde lorsque vous créez une suite de tests de régression robuste de 1 ou 2 tests. La réutilisation du code va vous faire gagner un temps incroyable à long terme.
Emplacement de l'élément
Au fur et à mesure que vous commencerez à expérimenter vos scripts Selenium, vous commencerez à comprendre pourquoi j'ai répertorié les éléments de localisation sur une page comme une compétence nécessaire. Vous allez vous retrouver dans l'extension des outils de développement du navigateur BEAUCOUP, et vous allez commencer à expérimenter XPath. Bien qu'il existe de nombreuses façons de localiser des éléments sur une page avec Selenium, XPath est l'un des plus flexibles et des plus puissants. Si vous ne pouvez pas identifier de manière unique un élément avec des stratégies simples telles que l'utilisation d'un identifiant, d'un nom ou d'un lien, vous recherchez XPath ou CSS Locators. Tout test de sélénium raisonnablement complexe nécessitera un peu de XPath ici ou là pour localiser les éléments de page tenaces et mieux vous obtiendrez XPath, plus vous deviendrez un testeur efficace.
D'accord Wilhelm, XPath est génial, pouvez-vous me donner quelque chose de plus que des devoirs ici? En fait, oui! Il existe également une extension Chrome astucieuse (elle est également disponible pour Firefox) appelée TruePath. Ce plugin fait un travail décent en proposant des listes de XPaths recommandés parmi lesquels vous pouvez copier / coller dans votre code de localisation Selenium. Ce n'est pas toujours parfait, mais je l'ai trouvé utile soit pour présenter un XPath relatif que j'ai immédiatement aimé, soit pour présenter un XPath relatif qui était assez proche de quelque chose que j'aimais et je pourrais ensuite l'utiliser comme point de départ pour peaufiner.
Attente intelligente sur AJAX qui utilise jQuery
Une fois que la localisation des éléments devient une seconde nature, vous rencontrerez probablement un autre problème courant. L'application Web que vous testez a AJAX (Asynchrone JavaScript And XML) appelle le navigateur vers le serveur et votre script Selenium passe à travers les actions, ne laissant pas suffisamment de temps au navigateur pour terminer le traitement de ce trafic asynchrone. Le site Web de commerce électronique que je testais avait ce problème où mon test Selenium cliquait sur «Ajouter au panier», puis sur «Afficher le panier» si rapidement que lorsqu'il est arrivé à la page Panier, le panier était vide! J'avais besoin de dire à mon test Selenium d'attendre un laps de temps approprié avant de cliquer sur "Afficher le panier", mais comment faire?
Il y a quelques leçons de base sur Selenium associées aux conditions d'attente que les didacticiels couvrent, mais aucune d'entre elles ne semblait appropriée pour quelque chose d'asynchrone et dynamique comme celui-ci. Comment puis-je prédire le temps qu'il faudra au serveur Web pour répondre? Dois-je surestimer pour être sûr et rendre mon test plus lent que nécessaire? Y a-t-il un meilleur moyen? Il s'avère que oui. De nombreux frameworks Web modernes utilisent aujourd'hui la bibliothèque jQuery pour prendre en charge les appels AJAX qu'ils effectuent vers le serveur principal. Selenium WebDriver me permet d'exécuter JavaScript en tant qu'étape de test, et je peux exécuter du JavaScript qui vérifie l'état de jQuery pour avoir une idée du moment où le navigateur a fini de parler au serveur Web et que je peux continuer. Enterré profondément dans le site Web toolsqa, ne faisant pas partie du didacticiel Selenium, j'ai trouvé ceci:
Pour les débutants, ces informations supplémentaires sont excellentes, mais si vous voulez quelque chose de plus pertinent, voici un article concis sur le même sujet:
La gestion du changement
Le dernier sujet que je vais vous laisser est celui qui tourmente tous les testeurs de Selenium, c'est-à-dire la gestion du changement. L'un des inconvénients de l'automatisation des tests Web est la fréquence à laquelle l'interface utilisateur change et son impact sur la stabilité de vos tests automatisés. En tant qu'ingénieur en automatisation des tests, vous vous habituerez rapidement au processus de dépannage pour savoir pourquoi un test n'a pas pu s'exécuter complètement et si c'était:
- Un problème avec votre test
- Un problème avec l'environnement
- Une modification anodine de l'application (c'est-à-dire pas un bug)
- Un changement inattendu de l'application (c'est à dire un vrai bug!)
Attendez-vous à beaucoup de fausses alarmes avec vos tests automatisés échouant non pas parce qu'ils ont trouvé un bogue, mais plutôt parce qu'ils doivent être maintenus ou parce que l'environnement a un problème.
L'une des stratégies pour aider à minimiser ce problème omniprésent que j'ai déjà abordé avec Element Location. Souvent, lorsqu'un test ne parvient pas à localiser un élément, c'est parce qu'il utilise une stratégie de localisation qui n'est plus valide sur le déploiement le plus récent de l'application. La façon dont vous localisez un élément peut être importante ici, alors discutons d'un exemple de la façon d'écrire un localisateur résilient au changement:
Si vous pensez à un XPath absolu vers un élément comme celui-ci:
/ html / body / div [25] / div [2] / div / span / section [2] / div / h2 / p
Boy, tout petit changement dans le HTML va casser cette chose. Si vous construisez un XPath relatif comme ceci:
//p[@id='8232:0′ITED[contains(.,'Guidance for Success ')]
Ensuite, votre test a de meilleures chances de réussir. Notez les mots «meilleure chance». Parfois, l'application changera tellement que vous n'avez tout simplement pas de chance. Mais écrire des tests plus résilients réduira les chances de travail futur pour vous-même. (Ou vous pouvez vérifier Parasoft Sélénic.)
Ce même problème est également présent avec l'attente. De nombreux facteurs peuvent provoquer une instabilité dans l'automatisation de vos tests en raison des conditions d'attente. Utiliser des stratégies comme Smart Waiting sur AJAX L'utilisation de jQuery vous aidera à réduire la probabilité de devoir résoudre un problème avec votre test en raison des conditions d'attente. Sur le sujet, voici un tutoriel utile sur les attentes dans Selenium:
Tout comme pour l'emplacement des éléments, cependant, vous allez parfois être SOL et la maintenance est inévitable.
Résumé
L'expérience de l'apprentissage de Selenium m'a permis d'apprécier les défis auxquels vous pouvez vous attendre dans votre parcours pour devenir ingénieur en automatisation de tests. Si vous êtes nouveau et que vous vous sentez intimidé, rappelez-vous simplement que c'est plus facile que vous ne le pensez et que vous serez un testeur Web automatisé expert en un rien de temps.