Hur man drar och släpper in Selenium (Exempel)

⚡ Smart sammanfattning

Dra och släpp in Selenium WebDriver möjliggör automatiserad simulering av musbaserade interaktioner som flyttar ett källelement och släpper det på ett definierat mål. Klassen Actions driver dessa gester genom dragAndDrop- och dragAndDropBy-metoder för exakt, repeterbar webbläsarautomation.

  • 🎓 Använd Actions-klassen för att bygga tangentbords- och musgester, anropa sedan build() och perform() för att köra dem på sidan.
  • 🌟 Välj dragAndDrop(source, target) när du har båda elementen, och dragAndDropBy(source, xOffset, yOffset) när du behöver precision på pixelnivå.
  • 🚀 Vänta alltid tills käll- och målelementen finns innan du anropar dragoperationen för att undvika otillräckliga tester.
  • 🎖️ Verifiera droppen visuellt eller genom att bekräfta attributändringar på målet så att testet bekräftar verklig interaktion, inte bara en åtgärd i kö.
  • 🏆 AI-assisterade lokaliseringsverktyg reparerar trasiga XPaths efter UI-uppdateringar, vilket minskar underhållet för dra-och-släpp-sviter som körs i CI-pipelines.

Dra och släpp in Selenium

Vad är dra och släpp? Selenium?

Dra och släpp in Selenium är en automatiserad interaktion som simulerar att man klickar och håller ett källelement, flyttar det över sidan och släpper det på en målplats. Det används ofta för att testa moderna webbapplikationer som använder dra-och-släpp-gränssnitt, såsom filuppladdare, kanban-tavlor, butikerping vagnar och instrumentpanelsbyggare.

In Selenium WebDriver, dra och släpp utförs via Actions klass, som tillhandahåller specialiserade metoder för att kedja musgester och utföra dem som en enda sammansatt åtgärd.

Dra och släpp in Selenium

Klassen Actions visar två primära metoder för dra-och-släpp-automatisering:

Syntax:

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();

Här, dragAndDrop() tar käll- och destinations-WebElements, medan dragAndDropBy() tar källelementet och x/y-pixelförskjutningarna för att flytta det.

Hur man drar och släpper in Selenium

Följande tre scenarier demonstrerar praktisk dra-och-släpp-automatisering på Guru99 demosida https://demo.guru99.com/test/drag_drop.htmlMålet är att flytta BANK debetelementet in i Min sida debetsidan så att beloppet på 5 000 USD korrekt redovisas som en debettransaktion.

Scenario 1: Dra och släpp med dra-och-släpp-metoden

I det här scenariot dras källelementet (BANK) till destinationen (kontots debetsida) med hjälp av dragAndDrop(source, target) metod, som accepterar käll- och destinations-WebElements direkt.

Dra och släpp-scenario 1-konfiguration

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();
    }
}

Efter att skriptet körts, BANK kakel flyttas in i Min sida debetområdet och beloppet på 5 000 USD registreras som en debet.

Eclipse köra dra-och-släpp-skriptet

Det visuella resultatet på demosidan ser ut så här:

Dra-och-släpp-animering för utdata

Scenario 2: Dra och släpp med dragAndDropBy-metoden

Ocuco-landskapet dragAndDropBy(source, xOffset, yOffset) Metoden erbjuder precision på pixelnivå. Istället för att släppaping På ett målelement flyttas källan med ett angivet antal pixlar längs X- och Y-axlarna.

För att bestämma offseten, håll muspekaren över destinationsområdet i din webbläsare och läs pixelkoordinaterna med ett verktyg som inspektörslinjalen eller ett skärmkoordinattillägg.

Identifiera pixelförskjutningar för dragAndDropBy

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();
    }
}

Skriptet flyttar BANK-panelen med den angivna förskjutningen och släpper den på kontots debetsida, vilket ger samma ekonomiska resultat som scenario 1.

Scenario 3: Dra, släpp och verifiera flera element

Det här scenariot kedjar flera dra-och-släpp-operationer och verifierar resultatet genom att bekräfta slutbeloppet på målet. Flera källelement (BANK, FÖRSÄLJNING, 5000, 500) flyttas till sina respektive debet- och kreditzoner, och skriptet bekräftar att summorna matchar det förväntade saldot.

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);
        }
    }
}

Detta mönster visar hur dra-och-släpp kan kombineras med påståenden för att validera funktionellt beteende, inte bara visuell rörelse.

Bästa praxis för dra-och-släpp-automatisering

Dra-och-släpp-tester är bland de mest osäkra skripten i en Selenium sviten eftersom de är beroende av exakta muskoordinater och DOM-beredskap. Följande metoder gör dem tillförlitliga:

  • Vänta på element: Använda WebDriverWait med ExpectedConditions.elementToBeClickable innan dragningen anropas.
  • Föredra dra och släpp framför JavaSkriptknep: Inbyggda HTML5-draghändelser behöver ibland en JavaSkriptreserv, men förlita dig först på Actions API.
  • Scrolla målet till sikt: En destination utanför skärmen orsakar tysta fel. Actions.scrollToElement eller ett JavaSkriptskrollning innan dra.
  • Verifiera resultatet: Ange alltid en mätbar tillståndsändring (text, attribut, antal) efter att åtgärden har släppts istället för att lita på att åtgärden kördes.
  • Kör på en stabil upplösning: Pixelförskjutningsdragningar bryts om visningsportstorleken skiljer sig från den som används för att beräkna förskjutningarna.

Vanliga frågor

Dra och släpp in Selenium är en automatiserad musgest som plockar upp ett källelement och släpper det på ett mål. Den utförs via Actions-klassen med hjälp av dragAndDrop eller dragAndDropBy.

dragAndDrop accepterar käll- och destinations-WebElements. dragAndDropBy tar källvärdet plus x- och y-pixelförskjutningar, vilket ger exakt kontroll när destinationen inte är ett diskret element.

build() kompilerar de kedjade interaktionerna till en enda sammansatt åtgärd, och perform() kör den. Utan perform() körs de köade stegen aldrig mot webbläsaren.

Många HTML5-webbplatser använder inbyggda drag-händelser som Actions API inte alltid utlöser. I dessa fall skickar du dragstart-, dragover- och drop-händelserna via executeScript som en JavaSkriptreserv.

Öppna webbläsarens DevTools, håll muspekaren över destinationen och läs elementets getBoundingClientRect-värden.tracÄndra källpositionen från målpositionen för att få x- och y-förskjutningarna i pixlar.

Ja. Slå in käll- och målsökningarna i WebDriverWait med ExpectedConditions.elementToBeClickable så att dra bara körs efter att båda elementen är interaktiva, vilket minskar ojämnheter i CI-körningar.

AI-verktyg tillhandahåller självläkande positionerare som anpassar sig när XPaths ändras och rekommenderar stabila selektorer för käll- och målelement. Detta minskar underhållet för dra-och-släpp-sviter som körs i flera versioner.

Ja. AI-kodningsassistenter förvandlar ett enkelt scenario som "dra BANK till debetsidan och bekräfta summan" till en komplett åtgärdskedja med dra och släpp, bygg, utför och ett verifieringssteg.

Sammanfatta detta inlägg med: