Les premières étapes avec Selenium
Qu’est-ce que Selenium ?
Lorsque nous développons une application Web, nous nous devons de la livrer sans bug, que ce soit dans le code ou dans son fonctionnement. Lancer l’application et tester tout son comportement à la main, c’est-à-dire faire soi-même tous les parcours utilisateur possibles, est similaire à la récupération du formulaire A38 dans les Douze travaux d’Astérix.
Selenium est un framework qui allège la charge de travail lors des tests fonctionnels. Il fournit un ensemble d’outils pour scripter les tests fonctionnels, donc émuler automatiquement les parcours utilisateur au sein de notre application. Nous devons juste décrire le comportement de l’utilisateur, Selenium l’exécutera comme une personne le ferait.
1. Avantages de Selenium
Quelles que soient les technologies utilisées pour développer l’application Web, les tests avec Selenium sont totalement indépendants du code de cette application, c’est une application de test à part entière qui se connecte à l’application Web que nous voulons tester. Nous pouvons donc tester toutes les applications Web avec Selenium.
Selenium est open source, il n’exige aucune licence. Il peut fonctionner sur tous les systèmes d’exploitation et prend en charge les principaux navigateurs, comme Mozilla Firefox, Google Chrome...
Architecture de Selenium
Selenium est plus qu’un framework de tests fonctionnels. Il nous fournit un ensemble d’outils pour tester nos applications Web.
Architecture de Selenium
Comme le montre la figure précédente, la suite Selenium fournit les outils :
-
Selenium IDE : le plug-in pour les navigateurs permettant d’effectuer des tests très simples et basiques.
-
Selenium 2 (et versions supérieures) : le regroupement de Selenium RC (Remote Control) et de Selenium Web Driver au cœur de Selenium :
-
Selenium RC : l’outil qui permet d’utiliser le langage de notre choix pour écrire nos tests fonctionnels.
-
Selenium WebDriver : l’élément central des tests Selenium qui permet d’exécuter nos tests automatiquement sur un navigateur.
-
Selenium Grid : l’outil qui permet de lancer nos tests fonctionnels de manière parallèle sur plusieurs machines et plusieurs navigateurs.
Installation de Selenium
L’installation se fait par le téléchargement de Selenium sur le site : https://www.selenium.dev/. Nous devons choisir le client correspondant au langage dans lequel nous écrirons nos tests fonctionnels.
Pour Python, nous pouvons également passer par la ligne de commande pip :
pip install selenium
Avec cette installation, nous installons Selenium incluant les drivers Web pour les différents navigateurs et le module Selenium pour écrire nos scripts.
Selenium WebDriver
Le driver Web de Selenium est l’élément qui nous permet de lancer nos tests fonctionnels dans un navigateur. Lors de l’installation de Selenium avec pip, nous avons également installé les drivers pour Mozilla Firefox, Google Chrome, Microsoft Edge et Safari.
Afin de tester sur un navigateur, ce dernier doit être installé sur l’ordinateur qui lancera les tests.
Pour nous référer au Selenium Web Driver, nous utiliserons les termes driver Web ou instance du navigateur par la suite.
Nos scripts doivent commencer par la création de ce driver, donc par le choix du navigateur sur lequel nous allons tester notre application Web.
from selenium import webdriver
firefox = webdriver.Firefox()
chrome = webdriver.Chrome()
edge = webdriver.Edge()
safari = webdriver.Safari()
Le code précédent montre comment créer les environnements de test pour les quatre navigateurs les plus utilisés. Notons qu’il ne faut créer qu’un driver Web par script de test. Nous verrons au chapitre L’exécution sur plusieurs navigateurs simultanément comment lancer les mêmes tests sur plusieurs navigateurs en même temps de manière propre.
Dès que nous créons un driver Web, une instance réelle du navigateur choisi est lancée, comme le montre la figure ci-après....
Mise en place des scénarios de test
Nous pouvons tout à fait tester le comportement de notre application Web à l’aide de script Python classique. Cependant, cela relève des mauvaises pratiques.
Afin d’automatiser nos tests fonctionnels de manière propre, nous allons les intégrer à Pytest.
import pytest
from selenium import webdriver
@pytest.fixture
def webdriver():
from selenium import webdriver
browser = webdriver.Chrome()
def finalizer():
browser.close()
browser.quit()
return browser
def test(webdriver):
pass
def test2(webdriver):
pass
Avant l’exécution des tests de Pytest, nous instancions notre driver Web. Notons que nous en faire l’import dans la fixture de Pytest car elle ne partage le même contexte que celui des tests.
Nous définissons également la fonction finalizer pour effectuer un teardown. Cette fonction nous permet de fermer le driver Web à la fin des tests et ainsi d’avoir une exécution propre qui ne laisse aucune instance de navigateur en vie.
Exécution des tests
Pour exécuter nos tests fonctionnels, nous n’utilisons pas la ligne de commande python, mais la ligne de commande :
pytest
La ligne de commande python reste possible avec :
python -m pytest
Rappelons que le nom du script de test doit être préfixé avec le terme « test_ »..
Exercices
1. Exercice 1
Écrivez un script qui lance un navigateur Google Chrome et le ferme juste après.
2. Exercice 2
Écrivez un script qui lance un navigateur Mozilla Firefox et le ferme juste après.
3. Exercice 3
Écrivez un script qui lance un navigateur Microsoft Edge et le ferme juste après.
4. Exercice 4
Écrire un script qui lance un navigateur Safari et le ferme juste après.