Comment utiliser Selenium pour automatiser des tests web

Selenium est un outil populaire utilisé pour automatiser les tests de navigation web. Il permet de simuler l’interaction d’un utilisateur avec une application web afin de vérifier que les fonctionnalités et les comportements sont conformes aux attentes. Vous pouvez l’utiliser pour tester des applications web sur différents navigateurs (comme Chrome, Firefox, Safari, etc.) en simulant des actions telles que le clic sur des boutons, la saisie de texte dans des formulaires, ou la navigation entre différentes pages.

Voici un guide détaillé pour commencer à utiliser Selenium pour automatiser des tests web.

1. Installer Selenium

Avant de commencer à écrire des tests avec Selenium, vous devez l’installer dans votre environnement de développement.

a. Installer Selenium avec Python

Selenium peut être installé via pip, le gestionnaire de paquets de Python. Exécutez la commande suivante pour installer Selenium :

bashCopierModifierpip install selenium

b. Télécharger un WebDriver

Selenium nécessite un « WebDriver » pour interagir avec les navigateurs. Selon le navigateur que vous souhaitez utiliser pour vos tests, vous devrez télécharger le WebDriver correspondant :

  • ChromeDriver pour Google Chrome
  • GeckoDriver pour Mozilla Firefox
  • SafariDriver pour Safari (uniquement sur macOS)
  • EdgeDriver pour Microsoft Edge

Pour Google Chrome, par exemple, vous pouvez télécharger ChromeDriver à partir de ce lien : ChromeDriver Downloads.

Assurez-vous que la version de votre WebDriver correspond à la version du navigateur que vous utilisez. Une fois téléchargé, placez-le dans un répertoire accessible par votre script.

2. Créer un premier test avec Selenium

Une fois Selenium installé et le WebDriver configuré, vous pouvez commencer à écrire des scripts pour automatiser des tests web. Nous allons écrire un test simple qui ouvre un site web et vérifie son titre.

Exemple de test simple en Python avec Selenium

pythonCopierModifierfrom selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

# Configurer le WebDriver (ici, pour Google Chrome)
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')  # Remplacez le chemin

# Ouvrir une page web
driver.get("https://www.example.com")

# Vérifier le titre de la page
assert "Example Domain" in driver.title

# Trouver un élément par son sélecteur et effectuer une action
element = driver.find_element(By.XPATH, "//h1")
print(element.text)  # Affiche le texte de l'élément h1

# Fermer le navigateur
driver.quit()

Explication du script :

  1. Import des modules Selenium : Vous importez les classes nécessaires de Selenium, telles que webdriver, By, et Keys.
  2. Initialisation du WebDriver : Vous initialisez un objet webdriver.Chrome qui lance une instance de Google Chrome (en fonction de votre WebDriver configuré).
  3. Navigation vers une URL : driver.get() permet de charger une page web spécifique.
  4. Assertion sur le titre de la page : Vous pouvez vérifier si le titre de la page contient un texte spécifique avec assert.
  5. Interaction avec un élément : Ici, nous recherchons un élément de la page avec find_element en utilisant un sélecteur XPath, et nous imprimons son texte.
  6. Fermeture du navigateur : Après l’exécution du test, la méthode quit() ferme le navigateur.

3. Interagir avec des éléments de la page

Selenium permet d’interagir avec différents éléments de la page, comme des boutons, des champs de saisie, des liens, etc. Voici quelques actions courantes :

a. Saisie de texte dans un champ de formulaire

pythonCopierModifier# Trouver un champ de saisie par son nom
search_box = driver.find_element(By.NAME, "q")

# Saisir du texte dans le champ
search_box.send_keys("Selenium WebDriver")

# Soumettre le formulaire
search_box.send_keys(Keys.RETURN)

b. Cliquer sur un bouton

pythonCopierModifier# Trouver un bouton par son ID
submit_button = driver.find_element(By.ID, "submit")

# Cliquer sur le bouton
submit_button.click()

c. Vérification de la présence d’un élément

pythonCopierModifier# Vérifier si un élément est présent sur la page
try:
    element = driver.find_element(By.XPATH, "//button[@id='submit']")
    print("Le bouton est présent.")
except:
    print("Le bouton n'est pas trouvé.")

4. Gérer les fenêtres et les onglets du navigateur

Selenium permet de gérer les fenêtres et les onglets du navigateur. Vous pouvez changer de fenêtre, fermer une fenêtre ou obtenir le titre d’une fenêtre.

a. Changer de fenêtre

pythonCopierModifier# Ouvrir une nouvelle fenêtre
driver.execute_script("window.open('http://www.example.com');")

# Changer d'onglet
driver.switch_to.window(driver.window_handles[1])

# Faire une action sur la nouvelle fenêtre
driver.get("http://www.example.com")

b. Fermer une fenêtre

pythonCopierModifier# Fermer la fenêtre actuelle
driver.close()

# Revenir à l'onglet précédent
driver.switch_to.window(driver.window_handles[0])

5. Gérer les alertes JavaScript

Les alertes JavaScript (comme les popups) peuvent être gérées facilement avec Selenium.

pythonCopierModifier# Accepter une alerte
alert = driver.switch_to.alert
alert.accept()

# Refuser une alerte
alert.dismiss()

# Obtenir le texte d'une alerte
alert_text = alert.text
print(alert_text)

6. Attendre que les éléments soient présents

Parfois, vous devez attendre qu’un élément soit présent avant d’interagir avec lui (par exemple, si la page met du temps à se charger). Selenium offre différentes façons de gérer les attentes.

a. Utiliser WebDriverWait

pythonCopierModifierfrom selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# Attendre que l'élément soit visible
element = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.ID, "submit"))
)

Explication :

  1. WebDriverWait : Cette classe permet d’attendre un certain temps (ici 10 secondes) jusqu’à ce qu’une condition soit remplie (dans ce cas, l’élément avec l’ID submit soit visible).
  2. ExpectedConditions : Cette bibliothèque contient des méthodes courantes pour attendre certaines conditions sur les éléments, comme la visibilité ou la cliquabilité.

7. Exécuter des tests avec un framework de test

Pour automatiser et organiser vos tests, vous pouvez utiliser Selenium avec des frameworks de test comme unittest (intégré à Python), pytest, ou nose.

Exemple avec unittest :

pythonCopierModifierimport unittest
from selenium import webdriver
from selenium.webdriver.common.by import By

class TestWebsite(unittest.TestCase):
    def setUp(self):
        # Initialiser le WebDriver
        self.driver = webdriver.Chrome(executable_path='/path/to/chromedriver')

    def test_title(self):
        self.driver.get("https://www.example.com")
        self.assertIn("Example Domain", self.driver.title)

    def tearDown(self):
        # Fermer le navigateur
        self.driver.quit()

if __name__ == "__main__":
    unittest.main()

Explication :

  1. setUp() : Cette méthode est appelée avant chaque test pour initialiser les prérequis (par exemple, ouvrir le navigateur).
  2. tearDown() : Cette méthode est appelée après chaque test pour nettoyer (par exemple, fermer le navigateur).
  3. Tests unitaires : Vous pouvez définir plusieurs tests dans une même classe et les exécuter tous avec unittest.main().

Conclusion

Selenium est un outil très puissant pour automatiser les tests web. En suivant ce guide, vous pouvez commencer à créer des scripts pour tester différentes fonctionnalités de vos applications web. L’utilisation d’attentes, la gestion des fenêtres et des alertes, ainsi que l’intégration avec des frameworks de test, vous permettent d’écrire des tests robustes et réutilisables.

carle
carle