L'exécution sur plusieurs navigateurs simultanément
Limite de notre approche actuelle
Jusqu’à présent, nos tests fonctionnels ne prennent en compte qu’un seul navigateur. Or nous savons que les navigateurs n’ont pas tous le même comportement ni le même interpréteur JavaScript.
Nous pourrions tout à fait écrire un test par navigateur, mais cela ne serait pas logique en programmation et encore moins une bonne pratique.
Pour lancer nos tests avec un seul script et sur plusieurs navigateurs, nous allons utiliser les spécificités de pytest et non de Selenium.
Il nous suffit en effet de paramétrer notre driver Web au moment de la création de la fixture de nos tests.
Mise en place et implémentation
Reprenons nos deux applications de démonstration : multipage et OnePage. Nous souhaitons maintenant lancer nos tests avec Mozilla Firefox et Google Chrome.
Pour ce faire, nous commençons par ajouter des paramètres à @pytest.fixture pour lui indiquer les différents navigateurs dont nous voulons une instance :
@pytest.fixture(params=[webdriver.Chrome(), webdriver.Firefox()])
Ensuite, nous devons placer un paramètre nommé request dans notre fonction de fixture pour récupérer ces différentes valeurs.
def homepage(request) :
Il nous suffit de récupérer les instances des navigateurs grâce à ce dernier paramètre dans le code :
request.param.get("http://localhost:8888/chapitre9-multipages/")
Voici notre test de l’application multipage tournant sur Google Chrome et Mozilla Firefox :
import pytest
from selenium import webdriver
from homepage import HomePage
from connectedpage import ConnectedPage
@pytest.fixture(params=[webdriver.Chrome(), webdriver.Firefox()])
def homepage(request) :
from selenium import webdriver
from homepage import HomePage
request.param.get("http://localhost:8888/chapitre9-multipages/")
homePage = HomePage(request.param)...
Exercice
Reprenez les deux tests de l’exercice du chapitre Le design pattern Page Object Model et modifiez-les en les lançant sur plusieurs instances de navigateurs simultanément.