Dans le dé­ve­lop­pe­ment Web moderne, il est essentiel de disposer d’une ap­pli­ca­tion adaptée aux dif­fé­rentes ré­so­lu­tions d’écran des visiteurs ou des uti­li­sa­teurs. L’approche res­pon­sive, dans laquelle le projet Web publié s’adapte au­to­ma­ti­que­ment aux capacités tech­niques de l’appareil utilisé, s’est imposée comme la solution standard, aujourd’hui in­con­tes­tée. En dehors d’une grande flexi­bi­lité en matière de ré­so­lu­tion d’écran, pour disposer d’un site internet moderne, il convient également de veiller à la meilleure com­pa­ti­bi­lité possible avec les na­vi­ga­teurs : le fait qu’un uti­li­sa­teur consulte le site internet avec Firefox, Chrome, Safari ou un autre client Web ne devrait en effet rien changer à l’uti­li­sa­tion.

C’est la raison pour laquelle les tests inter-na­vi­ga­teurs jouent un rôle important depuis des années dans la pro­gram­ma­tion de projets Web. L’un des outils les plus appréciés pour réaliser ces tests est le framework Selenium publié par Thought­Works que nous vous pré­sen­tons en détail dans ce tutoriel.

Qu’est-ce que Selenium ou Selenium WebDriver ?

Afin d’optimiser le processus de dé­ve­lop­pe­ment d’une ap­pli­ca­tion sur le temps et les coûts dans Python, Jason Huggins a créé en 2004 l’essentiel de ce qui constitue aujourd’hui le framework de testing Web Selenium à l’aide de Ja­vaS­cript­Tes­tRun­ner. À l’origine, cet outil était uni­que­ment destiné à une uti­li­sa­tion interne dans l’en­tre­prise in­for­ma­tique Thought­Works, dans laquelle J. Huggins tra­vail­lait à l’époque. Après avoir intégré Google en 2007, il a progressé dans le dé­ve­lop­pe­ment et la cor­rec­tion des erreurs du logiciel, qui fut dès lors publié en open source (licence Apache 2.0) afin de le mettre à la dis­po­si­tion du grand public. Suite à la fusion avec l’API WebDriver, le framework a adopté son nom actuel : Selenium ou Selenium WebDriver.

La version actuelle de Selenium est ex­clu­si­ve­ment basée sur le HTML et le Ja­vaS­cript et permet aux dé­ve­lop­peurs de tester et en­re­gis­trer les in­te­rac­tions avec une ap­pli­ca­tion Web afin de les répéter ensuite aussi souvent que souhaité, de façon en­tiè­re­ment au­to­ma­ti­sée. Les prin­ci­pales com­po­santes de ce processus de test sont les suivantes :

  • Selenium Core : ce module de base contient la fonc­tion­na­lité de base du framework, notamment Ja­vaS­cript­Tes­tRun­ner et l’API de commande de test sous-jacente.
  • Selenium IDE : Selenium IDE est l’en­vi­ron­ne­ment de dé­ve­lop­pe­ment du framework de test qui sert notamment de base à l’extension IDE pour Chrome et Firefox. Cet en­vi­ron­ne­ment est né­ces­saire pour l’en­re­gis­tre­ment et la lecture des tests.
  • Selenium WebDriver : WebDriver est l’interface es­sen­tielle per­met­tant la si­mu­la­tion d’in­te­rac­tions avec les uti­li­sa­teurs dans n’importe quel na­vi­ga­teur (Firefox, Chrome, Edge, Safari ou Internet Explorer). Depuis 2018, l’API est un standard W3C officiel.
  • Selenium Grid : Selenium Grid est une extension de WebDriver ou plutôt de son pré­dé­ces­seur, Selenium Remote Control (RC), qui permet de réaliser des tests sur plusieurs serveurs en parallèle. Cette extension permet de réduire con­si­dé­ra­ble­ment la durée des tests.

Dans quels cas Selenium WebDriver est-il utilisé ?

Dans le domaine du testing, Selenium fait figure de référence et in­ter­vient en par­ti­cu­lier en tant que structure de base pour dif­fé­rents pro­grammes de ce domaine. Parmi les exemples les plus connus, on peut notamment citer le framework Pro­trac­tor qui a été conçu spé­cia­le­ment pour tester les ap­pli­ca­tions Angular et AngularJS et pour simuler des in­te­rac­tions avec les uti­li­sa­teurs sur l’API WebDriver. Prévu pour les ap­pli­ca­tions mobiles natives et hybrides, le logiciel d’au­to­ma­ti­sa­tion de tests Appium utilise également cette interface stan­dar­di­sée pour réaliser des tests en toute sim­pli­cité dans les langages de pro­gram­ma­tion les plus courants.

Même Brow­serS­tack, le service Web basé sur le cloud très connu, repose sur Selenium : développé en Inde et pouvant être utilisé gra­tui­te­ment pendant une phase de test puis dans le cadre de dif­fé­rents abon­ne­ments payants, ce service utilise le framework de test comme base pour ses tests au­to­ma­ti­sés sur des or­di­na­teurs fixes ou des pé­ri­phé­riques portables.

Note

Dis­po­nible en open source, Selenium ou Selenium WebDrive peut na­tu­rel­le­ment être utilisé en dehors de pro­grammes existants comme les solutions men­tion­nées pré­cé­dem­ment. Grâce aux dif­fé­rents com­po­sants qui ont été ajoutés dans le framework au fil du temps, une telle uti­li­sa­tion est tout à a fait possible si l’on dispose des com­pé­tences cor­res­pon­dantes.

Tutoriel Selenium WebDriver : uti­li­sa­tion du framework pour vos tests Web

Si vous souhaitez utiliser Selenium pour créer vos propres scénarios de test sans avoir à dépendre d’un service externe ou du fabricant du logiciel, vous n’aurez pas besoin de con­nais­sances spé­ci­fiques en pro­gram­ma­tion. En effet, ce framework vous permet de réaliser les tests sur les na­vi­ga­teurs en toute sim­pli­cité car vous avez la pos­si­bi­lité d’écrire les scripts de test dans dif­fé­rents langages, notamment en Ja­vaS­cript, Java, C#, Ruby et Python. Le tutoriel Selenium suivant a pour but de vous expliquer l’ins­tal­la­tion et l’uti­li­sa­tion du framework à travers l’exemple de Python.

Note

Les étapes suivantes de ce tutoriel Selenium WebDriver né­ces­si­tent une version récente de Python.

Étape 1 : installer Selenium

Des clients ainsi qu’une série de bi­blio­thèques sont dis­po­nibles pour l’uti­li­sa­tion de Selenium WebDriver. Ils sont appelés « Language Bindings » (ou « bindings de langage ») et cons­ti­tuent la base du framework ou du processus de test. Cependant, vous devez uni­que­ment installer les pilotes du client et les bi­blio­thèques pour le langage dans lequel vous souhaitez écrire vos scripts.

Dans le cadre de notre tutoriel Selenium WebDriver, nous avons besoin des bindings de langage pour Python que vous pouvez installer par défaut avec le ges­tion­naire de paquets de Python pip et la commande suivante :

pip install selenium

Une autre solution consiste à té­lé­char­ger le paquet source en cliquant sur le lien indiqué pré­cé­dem­ment, à dé­com­pres­ser l’archive tar.gz et à utiliser le fichier setup.py pour procéder à l’ins­tal­la­tion. Dans ce cas, la commande né­ces­saire est la suivante :

python setup.py install

La deuxième étape consiste à té­lé­char­ger et installer le pilote du na­vi­ga­teur per­met­tant de rattacher Selenium. Dans Firefox, le pilote né­ces­saire sera par exemple ge­cko­dri­ver, dont on trouve la version of­fi­cielle dans le ré­per­toire GitHub suivant. Une liste ex­haus­tive des pilotes pour les prin­ci­paux na­vi­ga­teurs (Chrome, Edge, Internet Explorer, Safari, etc.) est dis­po­nible dans les do­cu­men­ta­tions en ligne of­fi­cielle de Selenium.

Note

Si vous souhaitez utiliser Selenium avec une connexion à distance, vous devez également installer les com­po­santes du serveur de Selenium. Vous trouverez les paquets d’ins­tal­la­tion cor­res­pon­dants sur la page de té­lé­char­ge­ment of­fi­cielle du framework (dans la colonne « Selenium Server (Grid) »). Veuillez toutefois noter que l’exécution de l’ap­pli­ca­tion du serveur requiert une version récente de l’en­vi­ron­ne­ment d’exécution Java (JRE).

Étape 2 : choisir un en­vi­ron­ne­ment de dé­ve­lop­pe­ment adapté (IDE)

Une fois ces con­di­tions pour l’uti­li­sa­tion de Selenium WebDriver remplies, vous pouvez vous lancer dans l’écriture des scripts de test de votre projet Web. Pour ce faire, vous aurez sim­ple­ment besoin de l’éditeur de code pri­vi­lé­gié. Dans ce cas, il est toutefois re­com­mandé d’utiliser un IDE Python (ou un en­vi­ron­ne­ment de dé­ve­lop­pe­ment pour le langage avec lequel vous souhaitez tra­vail­ler) afin d’optimiser votre pro­duc­ti­vité. Par exemples, les en­vi­ron­ne­ments suivants sont des solutions connues et ap­pré­ciées :

  • PyCharm : l’IDE Python PyCharm est dis­po­nible dans une édition gratuite avec une com­mu­nauté open source ou dans une édition pro­fes­sion­nelle payante. Dans tous les cas, vous aurez toutefois la pos­si­bi­lité d’écrire les scripts pour les tests Selenium avec chacune de ces éditions. Les systèmes d’ex­ploi­ta­tion supportés sont Windows, Linux et macOS.
  • PyDev : PyDev est un plugin Python pour l’en­vi­ron­ne­ment de dé­ve­lop­pe­ment Eclipse qui a été conçu à l’origine pour dé­ve­lop­per des ap­pli­ca­tions Java. Cette extension peut être té­lé­char­gée et installée via la page de projet ou di­rec­te­ment via le ges­tion­naire de mises à jour. PyDev et Eclipse sont com­pa­tibles avec tous les systèmes d’ex­ploi­ta­tion Windows, macOS et Linux courants.

Étape 3 : générer le script Python pour le test du na­vi­ga­teur (Firefox) avec Selenium

Une fois la solution souhaitée installée, vous pouvez commencer à écrire des scripts in­di­vi­duels pour au­to­ma­ti­ser les in­te­rac­tions avec les na­vi­ga­teurs à l’aide des classes et des fonc­tion­na­li­tés Selenium. Dans ce tutoriel Selenium, nous avons par exemple créé un script Python pour Firefox qui consulte au­to­ma­ti­que­ment le moteur de recherche Google dans le na­vi­ga­teur Mozilla, saisit un mot-clé puis analyse et en­re­gistre les résultats. Trans­po­sées sous la forme de code, ces étapes au­to­ma­ti­sées res­semblent à ceci :

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# Créer une session Firefox
driver = webdriver.Firefox()
driver.implicitly_wait(30)
driver.maximize_window()
# Appeler l’application web
driver.get("http://www.google.fr")
# Localiser la zone de texte
search_field = driver.find_element_by_id("lst-ib")
search_field.clear()
# Saisir et confirmer le mot-clé
search_field.send_keys("Mot-clé")
search_field.submit()
# Consulter la liste des résultats affichés à la suite de la recherche
# à l’aide de la méthode find_elements_by_class_name
lists= driver.find_elements_by_class_name("_Rm")
# Passer en revue tous les éléments et restituer le texte individuel
i=0
for listitem in lists:
    print (listitem.get_attribute("innerHTML"))
    i=i+1
    if(i>10):
        break
# Fermer la fenêtre du navigateur
driver.quit()

Le tableau suivant indique de façon claire le sens des dif­fé­rentes com­po­santes du script :

Ligne(s) de code Sens
from selenium import web­dri­ver­from selenium.webdriver.common.keys import Keys Le module WebDriver est d’abord chargé afin d’im­plé­men­ter les classes et les méthodes pour le support des dif­fé­rents na­vi­ga­teurs. Ensuite, le script charge la con­fi­gu­ra­tion du clavier virtuel afin de pouvoir simuler les saisies au clavier à une étape ul­té­rieure.
driver = webdriver.Firefox()driver.im­pli­citly_wait(30)driver.maximize_window() La seconde étape consiste à créer une instance Firefox, qui pourra être commandée plus tard à l’aide des commandes Selenium. Un dé­pas­se­ment de délai d’activité de 30 secondes est prévu pour le démarrage du na­vi­ga­teur. La fenêtre du na­vi­ga­teur doit par ailleurs être agrandie.
driver.get("http://www.google.fr") Le script consulte à présent la page Google française qui sert ici de base pour les in­te­rac­tions au­to­ma­ti­sées avec l’uti­li­sa­teur.
search_field = driver.find_element_by_id("lst-ib")search_field.clear() Lors de la con­sul­ta­tion du moteur de recherche, le script recherche la zone de texte de la recherche Google qui est signalée par l’attribut ID « lst-ib ». Une fois localisé, le champ de recherche est tout d’abord vidé à l’aide de la méthode clear().
search_field.send_keys("Mot-clé")search_field.submit() Le « mot-clé » est ensuite saisi et confirmé avec la méthode submit().
lists= driver.find_elements_by_class_name("_Rm") Les dif­fé­rents résultats de recherche sont alors listés comme éléments <a>. Afin de pouvoir les commander avec la méthode find_elements_by_class_name, ces résultats sont insérés à cet endroit du script.
i=0for listitem in lists: print (listitem.get_attribute("innerHTML")) i=i+1 if(i>10): break Lors de la dernière étape active, le script fournit la liste des résultats obtenus. Cette liste est limitée aux dix premiers résultats avec une balise <a>.
driver.quit() La ligne de code finale procède à la fermeture de l’instance du na­vi­ga­teur.
Note

L’exemple utilisé dans ce tutoriel Selenium montre de façon im­pres­sion­nante à quel point ce framework est idéal pour tester les na­vi­ga­teurs. Il met également en évidence l’intérêt de Selenium WebDrive dans le cadre d’un Web scraping avec Python qui fait également partie des nom­breuses pos­si­bi­li­tés d’uti­li­sa­tion de cette suite de test. Vous trouverez des in­for­ma­tions dé­tail­lées sur ce que recouvre ce type de collecte de données depuis le Web dans notre article « Qu’est-ce que le Web scraping ? ».

Selenium WebDriver ne convient pas à tous les scénarios

Selenium ou Selenium WebDriver met à votre dis­po­si­tion des outils de première qualité pour collecter des données sur des sites internet et simuler des in­te­rac­tions avec les uti­li­sa­teurs. Cependant, ce framework open source ne convient pas à tous les domaines comme le sou­lig­nent les dé­ve­lop­peurs dans leur liste de « Worst Cases » (« pires cas d’uti­li­sa­tion »). Les domaines suivants font notamment partie des cas et des contenus de sites internet que vous ne pouvez pas tester ou en­re­gis­trer avec Selenium :

  • Captchas : les captchas sont une solution bien connue et largement répandue, dé­ve­lop­pée pour protéger les sites internet contre les robots et les spams, qui empêche donc les processus au­to­ma­ti­sés à l’aide de Selenium. Si vous êtes confronté à des captchas, vous devrez donc dé­sac­ti­ver les tests de saisie pendant la phase de test ou le scraping ou les remplacer tem­po­rai­re­ment par un autre élément.
  • Té­lé­char­ge­ments de fichier : même s’il est possible de lancer le té­lé­char­ge­ment de fichiers dans les instances Selenium en simulant le clic sur un lien cor­res­pon­dant, l’API n’affiche pas l’avancée du processus de té­lé­char­ge­ment.
  • Code de réponse HTTP : Selenium comporte certaines fai­blesses dans le trai­te­ment des codes de statut HTTP. Si né­ces­saire, vous pouvez toutefois parer à ces in­con­vé­nients en ajoutant un proxy.
  • Connexion à des services de pres­ta­taires tiers : qu’il s’agisse de plates-formes de réseaux sociaux, de services sur le cloud ou d’un compte de mes­sa­ge­rie, il n’est pas re­com­mandé de procéder à une connexion auprès de pres­ta­taires tiers à l’aide d’une session Selenium. En effet, les pres­ta­taires de tels services mettent à dis­po­si­tion leurs propres API à des fins de test et les tests ainsi réalisés sont très lourds.
  • Test de per­for­mance : Selenium WebDrive ne convient pas à la réa­li­sa­tion de tests de per­for­mance à pro­pre­ment parler car ce framework n’a sim­ple­ment pas été conçu pour cela.
Aller au menu principal