Outils pour utilisateurs

Outils du site


informatique:tests_page_web_avec_selenium

Selenium

Tout d'abord, installation de selenium pour utilisation avec Python :

pip install selenium
pip install webdriver-manager # à priori inutile, inclus dans l’installation précédente

On crée ensuite un script (ici en Python3) qui va ouvrir un driver.

Il faut ensuite relever les identifiants de la page html, par exemple des inputs du formulaire, pour définir un objet qui va y accéder pour réaliser les opérations nécessaire : saisie de texte, clic pour soumettre le formulaire ou cocher une case d'option…

from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from webdriver_manager.firefox import GeckoDriverManager
from selenium.webdriver.common.by import By
 
# la variable est nommée `browser` on peut remplacer par `driver` qu'on retrouve généralement dans les exemples
browser = webdriver.Firefox(service=Service(GeckoDriverManager().install()))
 
# page de connexion, remplacer l'url par celle utile
browser.get("http://localhost:8010/login")
 
browser.maximize_window()
 
# se connecter
user_name = browser.find_element(By.ID, "username")
psw = browser.find_element(By.ID, "password")
 
user_name.send_keys("mon-user-name")
psw.send_keys("mon-mot-2-passe")
 
submit_button = browser.find_element(By.XPATH, value="//button[@type='submit']") # si le bouton est une input, remplacer button par input
submit_button.click()
 
# aller à la page du formulaire et le remplir
browser.get("http://localhost:8010/sample/new")
sample_name = browser.find_element(By.ID, "sample_name")
sample_samplingDate = browser.find_element(By.ID, "sample_samplingDate")
sample_archaeologicalLayer = browser.find_element(By.ID, "sample_archaeologicalLayer")
 
sample_name.send_keys("non-test-échantillon")
sample_samplingDate.send_keys("2023")
sample_archaeologicalLayer.send_keys("US niv4")
 
# … à vous de jouer !
 
#browser.quit() # activer si test automatique sans vérifications visuelles

Changements de page

Une fois connecté, on peut avoir besoin de changer de page. Il suffit dans ce cas d'appeler à nouveau la méthode get :

browser.get("http://localhost:8010/sample/new")

Il peut aussi y avoir des redirections d'une page vers une autre, par exemple le basculement sur un service d'identification 1) sur une autre url, puis retour.
Dans ce cas, il faut attendre que la page soit chargée ou un élément de cette page (logo, champ de saisie…)

# …
# on ajoute les déclarations des 2 objets suivants :
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
 
timeout = 5
 
try:
    username_input_present = EC.presence_of_element_located((By.ID, 'username'))
    WebDriverWait(driver, timeout).until(username_input_present)
except TimeoutException:
    print ("Timed out waiting for page to load")

src : https://stackoverflow.com/a/41725576/6614155
voir aussi : https://www.selenium.dev/documentation/webdriver/waits/

Gestion clavier

On peut simuler des frappes de clavier, comme une tabulation (TAB) pour changer de champ, la touche entrée (ENTER) pour soumettre le formulaire et évidemment saisir du texte :

# il faut tout d'abord ajouter 
from selenium.webdriver import Keys, ActionChains
 
driver.get("https://my-web-site")
 
# et enchaîner les frappes que l'on souhaite :
# passage au champ de saisie (ou bouton suivant)
ActionChains(driver)   \
    .send_keys(Keys.TAB)\
    .perform()
# taper un texte
ActionChains(driver)   \
    .send_keys("abcdef")\
    .perform()
# équivalent de la touche entrée (soumettre, valider)
ActionChains(driver)   \
    .send_keys(Keys.ENTER)\
    .perform()

Voir : https://www.selenium.dev/documentation/webdriver/actions_api/keyboard/
et https://github.com/SeleniumHQ/seleniumhq.github.io/blob/trunk/examples/python/tests/actions_api/test_keys.py#L34-L36

Exécuter

Il suffit d'exécuter le script python :

python3 mon-script-selenium.py
informatique/tests_page_web_avec_selenium.txt · Dernière modification : 2024/03/04 09:09 de bertrand