Comment glisser-déposer Selenium (Exemple)

⚡ Résumé intelligent

Glisser-déposer dans Selenium WebDriver permet la simulation automatisée des interactions à la souris, qui consistent à déplacer un élément source et à le déposer sur une cible définie. La classe Actions gère ces gestes grâce aux méthodes dragAndDrop et dragAndDropBy, pour une automatisation précise et reproductible du navigateur.

  • 🎓 Utilisez la classe Actions pour créer des gestes clavier et souris, puis appelez build() et perform() pour les exécuter sur la page.
  • 🌟 Choisissez dragAndDrop(source, cible) lorsque vous avez les deux éléments, et dragAndDropBy(source, xOffset, yOffset) lorsque vous avez besoin d'une précision au niveau du pixel.
  • 🚀 Attendez toujours que les éléments source et cible soient présents avant d'invoquer l'opération de glisser-déposer afin d'éviter des tests instables.
  • 🎖️ Vérifiez visuellement le dépôt ou en vérifiant les changements d'attributs sur la cible afin que le test confirme une interaction réelle et non une simple action mise en file d'attente.
  • 🏆 Les localisateurs assistés par l'IA réparent les XPath cassés après les mises à jour de l'interface utilisateur, réduisant ainsi la maintenance des suites de glisser-déposer exécutées dans les pipelines CI.

Glisser-déposer dans Selenium

Qu'est-ce que le glisser-déposer ? Selenium?

Glisser-déposer dans Selenium Il s'agit d'une interaction automatisée qui simule le clic maintenu sur un élément source, son déplacement sur la page et son relâchement à un emplacement cible. Elle est largement utilisée pour tester les applications web modernes qui reposent sur des interfaces de type glisser-déposer, telles que les modules de téléchargement de fichiers, les tableaux Kanban et les boutiques en ligne.ping paniers et outils de création de tableaux de bord.

In Selenium WebDriver, le glisser-déposer s'effectue via le Action classe, qui fournit des méthodes spécialisées pour enchaîner les gestes de la souris et les exécuter comme une seule action composite.

Glisser-déposer dans Selenium

La classe Actions expose deux méthodes principales pour l'automatisation du glisser-déposer :

syntaxe:

Actions act = new Actions(driver);
//for drag and drop directly on an element
act.dragAndDrop(Source, Destination).build().perform();

//for drag and drop with pixel offsets
act.dragAndDropBy(WebElement Source, int xOffset, int yOffset).build().perform();

Ici, dragAndDrop() prend les éléments Web source et destination, tandis que dragAndDropBy() prend l'élément source et les décalages en pixels x/y de lequel le déplacer.

Comment glisser-déposer Selenium

Les trois scénarios suivants illustrent l'automatisation pratique par glisser-déposer sur le Gurupage de démonstration 99 https://demo.guru99.com/test/drag_drop.htmlL'objectif est de déplacer le BANQUE élément de débit dans le Compte zone du côté débit afin que le montant de 5000 $ soit correctement comptabilisé comme une transaction au débit.

Scénario 1 : Glisser-déposer à l’aide de la méthode dragAndDrop

Dans ce scénario, l'élément source (BANQUE) est glissé vers la destination (Débit du compte) à l'aide de dragAndDrop(source, target) méthode qui accepte directement les WebElements source et destination.

Configuration du scénario 1 par glisser-déposer

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;

public class DragAndDropExample {
    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "G:\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://demo.guru99.com/test/drag_drop.html");

        // Locate the source (BANK) element
        WebElement Source = driver.findElement(By.xpath("//*[@id='credit2']/a"));
        // Locate the target (Account debit side) element
        WebElement Dest = driver.findElement(By.xpath("//*[@id='bank']/li"));

        // Create the Actions instance
        Actions act = new Actions(driver);
        // Perform drag and drop
        act.dragAndDrop(Source, Dest).build().perform();
    }
}

Une fois le script exécuté, le BANQUE La tuile se déplace dans le Compte zone débit et le montant de 5000 $ est enregistré comme un débit.

Eclipse exécution du script glisser-déposer

Le résultat visuel sur la page de démonstration ressemble à ceci :

Animation de sortie par glisser-déposer

Scénario 2 : Glisser-déposer à l’aide de la méthode dragAndDropBy

Le dragAndDropBy(source, xOffset, yOffset) Cette méthode offre une précision au niveau du pixel. Au lieu de la chuteping Sur un élément cible, il déplace la source d'un nombre spécifié de pixels le long des axes X et Y.

Pour déterminer le décalage, survolez la zone de destination dans votre navigateur et lisez les coordonnées en pixels à l'aide d'un outil comme la règle de l'inspecteur ou une extension de coordonnées d'écran.

Identification des décalages de pixels pour glisser-déposer par

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;

public class DragAndDropByExample {
    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "G:\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://demo.guru99.com/test/drag_drop.html");

        // Locate the source (BANK) element
        WebElement Source = driver.findElement(By.xpath("//*[@id='credit2']/a"));

        // Create the Actions instance
        Actions act = new Actions(driver);
        // Drag the source by 400 pixels right and 0 pixels down
        act.dragAndDropBy(Source, 400, 0).build().perform();
    }
}

Le script déplace la tuile BANQUE selon le décalage fourni et la dépose du côté débit du compte, produisant le même résultat financier que le scénario 1.

Scénario 3 : Glisser-déposer et vérifier plusieurs éléments

Ce scénario enchaîne plusieurs opérations de glisser-déposer et vérifie le résultat en affichant le montant final sur la cible. Plusieurs éléments sources (BANQUE, VENTES, 5000, 500) sont déplacés vers leurs zones de débit et de crédit respectives, et le script confirme que les totaux correspondent au solde attendu.

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;

public class DragAndDropMultiple {
    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "G:\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://demo.guru99.com/test/drag_drop.html");

        // Locate sources
        WebElement srcBank = driver.findElement(By.xpath("//*[@id='credit2']/a"));
        WebElement srcSales = driver.findElement(By.xpath("//*[@id='credit1']/a"));
        WebElement src5000 = driver.findElement(By.xpath("//*[@id='fourth']/a"));
        WebElement src500 = driver.findElement(By.xpath("//*[@id='fourth']/a"));

        // Locate targets
        WebElement debitSide = driver.findElement(By.xpath("//*[@id='bank']/li"));
        WebElement creditSide = driver.findElement(By.xpath("//*[@id='loan']/li"));
        WebElement amount7 = driver.findElement(By.xpath("//*[@id='amt7']/li"));
        WebElement amount8 = driver.findElement(By.xpath("//*[@id='amt8']/li"));

        Actions act = new Actions(driver);
        act.dragAndDrop(srcBank, debitSide).build().perform();
        act.dragAndDrop(srcSales, creditSide).build().perform();
        act.dragAndDrop(src5000, amount7).build().perform();
        act.dragAndDrop(src500, amount8).build().perform();

        // Verify the displayed total
        String total = driver.findElement(By.xpath("//*[@id='totamt']")).getText();
        if (total.equals("5500")) {
            System.out.println("Test Passed: total matches expected 5500");
        } else {
            System.out.println("Test Failed: actual total " + total);
        }
    }
}

Ce modèle illustre comment le glisser-déposer peut être combiné à des assertions pour valider un comportement fonctionnel, et pas seulement un mouvement visuel.

Meilleures pratiques pour l'automatisation du glisser-déposer

Les tests par glisser-déposer figurent parmi les scripts les plus instables. Selenium Ces suites logicielles dépendent de coordonnées précises de la souris et de la disponibilité du DOM. Les pratiques suivantes garantissent leur fiabilité :

  • Attendez les éléments : Utilisez le WebDriverWait au ExpectedConditions.elementToBeClickable avant d'invoquer le drag.
  • Je préfère glisser-déposer JavaAstuces de script : Les événements de glisser-déposer HTML5 natifs nécessitent parfois un JavaUtilisation d'un script de repli, mais privilégiez d'abord l'API Actions.
  • Faites défiler la cible pour la rendre visible : Une destination hors écran provoque des erreurs silencieuses. Utilisez Actions.scrollToElement JavaDéfilez le script avant de le faire glisser.
  • Vérifier le résultat : Toujours exiger une modification d'état mesurable (texte, attribut, nombre) après l'opération au lieu de se fier à l'exécution de l'action.
  • Exécuter sur une résolution stable : Le décalage en pixels ne fonctionne plus si la taille de la fenêtre d'affichage diffère de celle utilisée pour calculer les décalages.

FAQ

Glissez et déposez dans Selenium Il s'agit d'un geste de souris automatisé qui sélectionne un élément source et le dépose sur une cible. Il est réalisé via la classe Actions à l'aide des méthodes dragAndDrop ou dragAndDropBy.

La méthode dragAndDrop accepte les éléments Web source et destination. La méthode dragAndDropBy prend en compte la source ainsi que les décalages en pixels x et y, offrant un contrôle précis lorsque la destination n'est pas un élément discret.

La fonction `build()` compile les interactions enchaînées en une seule action composite, et `perform()` l'exécute. Sans `perform()`, les étapes mises en file d'attente ne sont jamais exécutées dans le navigateur.

De nombreux sites HTML5 utilisent des événements de glisser-déposer natifs que l'API Actions ne déclenche pas toujours. Dans ce cas, déclenchez les événements dragstart, dragover et drop via executeScript. JavaSolution de repli du script.

Ouvrez les outils de développement du navigateur, survolez la destination et lisez les valeurs de la méthode getBoundingClientRect de l'élément.tracUtilisez la position source par rapport à la position cible pour obtenir les décalages x et y en pixels.

Oui. Enveloppez les recherches source et cible dans WebDriverWait avec ExpectedConditions.elementToBeClickable afin que le glisser-déposer ne s'exécute qu'une fois les deux éléments interactifs, réduisant ainsi les instabilités lors des exécutions d'intégration continue.

Les outils d'IA fournissent des localisateurs auto-réparateurs qui s'adaptent aux modifications des XPath et recommandent des sélecteurs stables pour les éléments source et cible. Cela réduit la maintenance des suites de glisser-déposer exécutées sur plusieurs versions.

Oui. Les assistants de programmation IA transforment un scénario en langage clair tel que « glisser BANQUE du côté débit et afficher le total » en une chaîne d'actions complète comprenant glisser-déposer, construire, exécuter et une étape de vérification.

Résumez cet article avec :