Explication de SeleniumWebDriver : Automatisez votre Flux de Tests Web
Tags: webdev, selenium, testing, learning
Published: 2024-07-10 15:53:18

Salut à tous, 

Aujourd'hui, je vais vous parler de Selenium WebDriver, une nouvelle notion que je viens d'apprendre. Dans cet article, nous nous concentrerons principalement sur la théorie afin de comprendre ce qu'est Selenium WebDriver, son utilité et bien d'autres concepts associés.

## Table des matières

- [Qu'est ce que Selenium?](#qu-est-ce-que-selenium-?)
- [Composants de Selenium](#composants-de-selenium)
  - [Selenium IDE](#selenium-ide)
  - [Selenium RC](#selenium-rc)
  - [Selenium WebDriver](#selenium-webdriver)
  - [Selenium Grid](#selenium-grid)
- [Avantages et limites de Selenium WebDriver](#avantages-et-limites-de-selenium-webdriver)
- [Architecture du Framework Selenium WebDriver](#architecture-du-framework-selenium-webdriver)
- [Processus d'exécution d'un test](#processus-d-exécution-d-un-test)
- [Comment utiliser Selenium WebDriver avec Java ?](#comment-utiliser-selenium-webdriver-avec-java-?)


## Qu'est ce que Selenium ?

Selenium est un ensemble open-source d'outils et de bibliothèques qui permet d'effectuer des tests multi-navigateurs pour vérifier si le site web fonctionne de manière cohérente sur différents navigateurs Il est largement utilisé pour les tests automatisés des applications Web.

**Compatibilité :**

Selenium est compatible avec les langages C#, Java, Python, JavaScript, Ruby, Python et PHP.

**Remarque :** 

- Les testeurs sont libres de choisir le langage dans lequel concevoir les cas de test, ce qui rend Selenium très avantageux.

- Il n'est pas obligatoire d'écrire le code Selenium dans le même langage que l'application. Par exemple, pour une application écrite en PHP, le script du test peut être écrit en Java.
  

## Composants de Selenium

La suite des tests Selenium comprend quatre composants principaux:

![composants du selenium](https://media.geeksforgeeks.org/wp-content/uploads/20240529180052/Components-of-Selenium.webp)


## Selenium IDE:

Selenium IDE pour `Integrated Development Environement`, est un outil d'enregistrement/d'exécution pour les tests fonctionnels (`functionnal testing`)

**NB :** Vous n'avez pas besoin d'apprendre un langage de script pour créer le test fonctionnel.

## Selenium RC:

Selenium RC, pour `Remote Controller` nécessite des connaissances dans au moins un langage de programmation. Ses bibliothèques principaux sont :
 - Serveur
 - Client

**NB :** Architecture complexe et ayant des limites.

## Selenium WebDriver

C'est un Framework permettant d'exécuter des tests multi-navigateurs et c'est une version améliorée du Selenium RC. 

**NB :** 

- Bien qu'il soit une version améliorée de Selenium RC, son architecture est complément différente.
- Il faut tout même connaitre un langage de programmation pour l'utiliser.

## Selenium Grid

Pour l'exécution simultanée de cas de test sur différents navigateurs, machines et système d'exploitation.

**NB :** 

- Facilite les tests de compatibilités entre navigateurs.
- Deux versions : Grid 1 (ancienne version) et Grid 2 ( nouvelle version).

#Avantages et limites de Selenium WebDriver


## Avantages de Selenium WebDriver


1. Support Multinavigateur :
Selenium WebDriver supporte de nombreux navigateurs tels que Chrome, Firefox, Safari, Edge, etc. Cela permet de tester les applications web sur différents environnements de navigation.

2. Contrôle Direct du Navigateur :
WebDriver interagit directement avec le navigateur, ce qui assure une meilleure précision et fiabilité des tests par rapport à d'autres outils qui utilisent des scripts injectés.

3. Support Multi-langage :
Selenium WebDriver permet d'écrire des scripts de test dans plusieurs langages de programmation tels que Java, Python, C#, Ruby, JavaScript, etc., offrant une grande flexibilité aux développeurs.

4. API Flexible et Puissante :
L'API de Selenium WebDriver est riche et permet de réaliser des tests complexes incluant des interactions avancées avec les éléments web, la gestion des cookies, des sessions, etc.

5. Open Source et Gratuit :
Selenium est un outil open source, ce qui signifie qu'il est gratuit et que la communauté contribue constamment à son amélioration et à son évolution.

6. Compatibilité avec Divers Outils de Test :
Selenium WebDriver peut être intégré avec des frameworks de tests populaires comme TestNG, JUnit, NUnit, ainsi qu'avec des outils de CI/CD comme Jenkins, Maven, etc.

7. Tests Répartis et Parallèles :
Avec Selenium Grid, il est possible d'exécuter des tests en parallèle sur plusieurs machines et navigateurs, ce qui réduit le temps total d'exécution des tests.

8. Offre une compatibilité avec IphoneDriver, HtmlUnitDriver et AndroidDriver

![BrowserStack](https://media.licdn.com/dms/image/C4E12AQF2iKl5F-hSXw/article-inline_image-shrink_1000_1488/0/1584834889636?e=1722470400&v=beta&t=0OBtjmfKoGv0qgVb7wO4emPRJwrJnhEbHqgvV1jNCHI)

## Limites de Selenium WebDriver

1. Limitation aux Tests Web :
Selenium WebDriver ne peut être utilisé que pour tester des applications web. Il ne supporte pas les applications desktop ou les applications mobiles natives.

2. Gestion des Pop-ups et des Fenêtres :
Selenium peut rencontrer des difficultés à gérer certaines pop-ups et fenêtres modales, surtout celles générées par le système d'exploitation.

3. Dépendance aux Sélecteurs de Page :
Les scripts de Selenium dépendent fortement de la structure et des sélecteurs des pages web (ID, nom, classes, etc.). Si l'interface utilisateur change fréquemment, les scripts de test doivent être constamment mis à jour.

4. Absence de Support pour Capturer les Erreurs Visuelles :
Selenium WebDriver ne peut pas détecter les erreurs visuelles telles que les problèmes d'alignement ou les couleurs incorrectes. Des outils supplémentaires comme Applitools Eyes peuvent être nécessaires pour les tests visuels.

5. Courbe d'Apprentissage :
Bien que Selenium soit puissant, il peut être complexe à maîtriser pour les débutants en raison de la nécessité de comprendre la programmation, l'automatisation des tests et l'API de Selenium.

6. Performance :
Les tests Selenium peuvent être plus lents que ceux exécutés par certains outils d'automatisation headless (sans interface utilisateur), surtout lorsque des captures d'écran ou des vidéos des tests sont nécessaires.

7. Maintenance des Tests :
En raison de la nature dynamique des applications web modernes, les tests Selenium nécessitent une maintenance régulière pour s'assurer qu'ils restent fonctionnels face aux changements de l'application.


## Architecture du Framework Selenium WebDriver

L'architecture Webdriver est composée de quatre composants principaux :


1. Client Librairies (Bibliothèques Clients)
Les bibliothèques clientes sont des API fournies par Selenium pour différents langages de programmation. Les principales bibliothèques clientes sont disponibles pour :
 - Java
 - C#
 - Python
 - Ruby
 - JavaScript (Node.js)

2. JSON Wire Protocol over HTTP (Protocole JSON Wire)
Le JSON Wire Protocol est un protocole standardisé utilisé par Selenium WebDriver pour envoyer des commandes aux navigateurs. Ce protocole définit une API RESTful qui permet de communiquer avec les navigateurs en utilisant des requêtes HTTP. Les bibliothèques clientes envoient des requêtes HTTP contenant les commandes Selenium aux serveurs WebDriver via ce protocole.

3. Browser Drivers (Drivers de Navigateur)
Chaque navigateur a son propre driver qui agit comme un pont entre Selenium WebDriver et le navigateur. Les drivers de navigateur reçoivent les commandes en JSON Wire Protocol des bibliothèques clientes et les traduisent en actions spécifiques au navigateur.
Les drivers de navigateur comprennent :
 - **ChromeDriver** pour Google Chrome
 - **GeckoDriver** pour Mozilla Firefox
 - **IEDriver**pour Internet Explorer
 - **EdgeDriver** pour Microsoft Edge
 - **SafariDriver** pour Safari

4. Browsers (Navigateurs)
Les navigateurs sont les applications web réelles avec lesquelles Selenium interagit. Les drivers de navigateur lancent et contrôlent les instances des navigateurs pour exécuter les scripts de test. Les navigateurs peuvent être exécutés en mode graphique ou headless (sans interface utilisateur) pour des tests plus rapides.

![Selenium WebDriver Framework Architecture](https://www.edubridgeindia.com/blog/wp-content/uploads/2023/10/Selenium-WebDriver-Architecture-Diagram-e1698737031127.jpg)



## Processus d'exécution d'un test

1. Écriture du Script : Le testeur écrit des scripts de test en utilisant les bibliothèques clientes de Selenium dans le langage de programmation choisi.

2. Envoi de Commandes : Les bibliothèques clientes envoient des commandes en utilisant le JSON Wire Protocol via des requêtes HTTP au driver de navigateur correspondant.

3. Interprétation des Commandes : Le driver de navigateur interprète les commandes et les traduit en actions spécifiques au navigateur.

4. Exécution des Actions : Le navigateur exécute les actions (comme cliquer sur un bouton, entrer du texte, etc.) et retourne les résultats via le driver de navigateur.

5. Retour des Résultats : Les résultats des actions sont renvoyés via le driver de navigateur aux bibliothèques clientes, qui les traitent et génèrent des rapports de test.

## Comment utiliser Selenium WebDriver avec Java?

Pour cette section de pratique, je vous invite a lire cette article [Introduction pratique aux tests d'applications Web avec Selenium WebDriver et Java.](https://dev.to/laroseikitama/introduction-pratique-aux-tests-dapplications-web-avec-selenium-webdriver-et-java-23ml)