Événements de souris avec Selenium WebDriver

Événements de souris avec Selenium WebDriver

Dans Selenium WebDriver, les opérations liées à la souris sont encapsulées dans la classe ActionChains. Cette classe fournit des méthodes pour simuler des actions de souris, telles que des clics, des déplacements et des glisser-déposer.

Voici un tableau récapitulatif des méthodes disponibles dans ActionChains :

Méthode Description
click(on_element=None) Clic gauche de la souris
click_and_hold(on_element=None) Maintien du clic gauche sans relâcher
context_click(on_element=None) Clic droit de la souris
double_click(on_element=None) Double-clic gauche
drag_and_drop(source, target) Glisser-déposer d'un élément source vers une cible
drag_and_drop_by_offset(source, xoffset, yoffset) Glisser-déposer vers des coordonnées relatives
move_by_offset(xoffset, yoffset) Déplacer la souris vers des coordonnées absolues
move_to_element(to_element) Déplacer la souris vers un élément spécifié
move_to_element_with_offset(to_element, xoffset, yoffset) Déplacer la souris à une distance relative d'un élément
pause(seconds) Introduire une pause dans la séquence d'actions
release(on_element=None) Relâcher le clic gauche sur un élément
send_keys(*keys_to_send) Envoyer des entrées clavier à l'élément actif
send_keys_to_element(element, *keys_to_send) Envoyer des entrées clavier à un élément ciblé
perform() Exécuter toutes les actions en attente
reset_actions() Réinitialiser la file d'attente des actions

Clics simples, double-clics et clics droits

Examinons comment effectuer des clics basiques avec ActionChains.


"""
Exemple de clics avec ActionChains
Site de test : http://sahitest.com/demo/clicks.htm
"""
from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains

# Initialisation du pilote
pilote = webdriver.Chrome()
try:
    pilote.get('http://sahitest.com/demo/clicks.htm')
    
    # Effectuer un clic gauche
    sleep(2)
    element_cible1 = pilote.find_element_by_xpath('/html/body/form/input[3]')
    ActionChains(pilote).click(element_cible1).perform()
    
    # Effectuer un double-clic
    sleep(2)
    element_cible2 = pilote.find_element_by_xpath('/html/body/form/input[2]')
    ActionChains(pilote).double_click(element_cible2).perform()
    
    # Effectuer un clic droit
    sleep(2)
    element_cible3 = pilote.find_element_by_xpath('/html/body/form/input[4]')
    ActionChains(pilote).context_click(element_cible3).perform()
finally:
    sleep(5)
    pilote.quit()

Glisser-déposer

Le glisser-déposer implique de maintenir le clic gauche, de déplacer la souris vers un élément cible, puis de relâcher.

Exemple avec jQuery UI :


"""
Glisser-déposer sur jQuery UI
Lien : https://jqueryui.com/droppable/
"""
import time
from selenium import webdriver
from selenium.webdriver import ActionChains

# Configuration
nav = webdriver.Chrome()
nav.get('https://jqueryui.com/droppable/')
time.sleep(3)

# Gérer l'iframe
cadre = nav.find_element_by_tag_name('iframe')
nav.switch_to.frame(cadre)

# Identifier les éléments
depart = nav.find_element_by_id('draggable')
arrivee = nav.find_element_by_id('droppable')

# Réaliser le glisser-déposer
ActionChains(nav).drag_and_drop(depart, arrivee).perform()

time.sleep(5)
nav.quit()

Un autre exemple pour un puzzle interactif :


"""
Glisser-déposer pour un jeu de puzzle
URL : http://www.jq22.com/demo/pintu20151229/
"""
import time
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

navigateur = webdriver.Chrome()
navigateur.get('http://www.jq22.com/demo/pintu20151229/')

# Démarrer le jeu
time.sleep(1)
bouton_debut = navigateur.find_element_by_id('start')
ActionChains(navigateur).move_to_element(bouton_debut).click().perform()

# Exécuter le glisser-déposer
time.sleep(2)
piece_source = navigateur.find_element_by_xpath('//*[@id="container"]/div[18]')
piece_dest = navigateur.find_element_by_xpath('//*[@id="container"]/div[18]')
ActionChains(navigateur).move_to_element(piece_source).drag_and_drop(piece_source, piece_dest).perform()

time.sleep(3)
navigateur.quit()

Survol de la souris

Le survol déclenche des événements en déplaçant la souris au-dessus d'un élément, comme le changement d'apparence d'un lien.


"""
Survol d'un lien hypertexte
"""
import time
from selenium import webdriver
from selenium.webdriver import ActionChains

conducteur = webdriver.Chrome()
conducteur.get('https://www.cnblogs.com/neeo')

time.sleep(3)
cible = conducteur.find_elements_by_class_name('postTitle2')[0]

# Survoler l'élément
ActionChains(conducteur).move_to_element(cible).perform()

# Cliquer après survol
time.sleep(2)
ActionChains(conducteur).move_to_element(cible).click().perform()

time.sleep(5)
conducteur.quit()

Exemple d'interaction avec le menu de Taobao :


"""
Survol d'une liste de menu sur Taobao
"""
import time
from selenium import webdriver
from selenium.webdriver import ActionChains as AC

explorateur = webdriver.Chrome()
explorateur.get('https://www.taobao.com/')

# Parcourir les menus du marché
menus = explorateur.find_elements_by_class_name('J_Cat')
print(f"Nombre de menus trouvés : {len(menus)}")
for m in menus:
    AC(explorateur).move_to_element(m).perform()
    time.sleep(0.5)

# Survoler un menu spécifique et cliquer sur un sous-élément
time.sleep(2)
AC(explorateur).move_to_element(menus[0]).perform()
time.sleep(2)
sous_element = explorateur.find_element_by_xpath('/html/body/div[4]/div[1]/div[1]/div[1]/div/div/div[1]/div[1]/div[1]/p/a[1]')
print(sous_element.text)
sous_element.click()

time.sleep(6)
explorateur.quit()

Vérification par glissement

Pour des exemples avancés de vérification par glissement, consultez cet article technqiue : Vérification par glissement avec Selenium.

Étiquettes: Selenium WebDriver Python ActionChains Automatisation de navigateur

Publié le 9 juin à 23h24