Hvordan dra og slippe inn Selenium (Eksempel)

โšก Smart oppsummering

Dra og slipp inn Selenium WebDriver muliggjรธr automatisert simulering av musebaserte interaksjoner som flytter et kildeelement og slipper det pรฅ et definert mรฅl. Actions-klassen driver disse bevegelsene gjennom dragAndDrop- og dragAndDropBy-metoder for presis og repeterbar nettleserautomatisering.

  • ๐ŸŽ“ Bruk Actions-klassen til รฅ bygge tastatur- og musebevegelser, og kall deretter build() og perform() for รฅ utfรธre dem pรฅ siden.
  • ๐ŸŒŸ Velg dragAndDrop(source, target) nรฅr du har begge elementene, og dragAndDropBy(source, xOffset, yOffset) nรฅr du trenger presisjon pรฅ pikselnivรฅ.
  • ๐Ÿš€ Vent alltid til kilde- og mรฅlelementene er til stede fรธr du starter draoperasjonen for รฅ unngรฅ ustabile tester.
  • ๐ŸŽ–๏ธ Bekreft slippet visuelt eller ved รฅ bekrefte attributtendringer pรฅ mรฅlet, slik at testen bekrefter reell interaksjon, ikke bare en handling i kรธ.
  • ๐Ÿ† AI-assisterte lokaliseringsverktรธy reparerer รธdelagte XPath-er etter brukergrensesnittoppdateringer, noe som reduserer vedlikehold for dra-og-slipp-pakker som kjรธrer i CI-pipelines.

Dra og slipp inn Selenium

Hva er dra og slipp Selenium?

Dra og slipp inn Selenium er en automatisert interaksjon som simulerer รฅ klikke og holde et kildeelement, flytte det over siden og slippe det pรฅ en mรฅlplassering. Det er mye brukt til รฅ teste moderne webapplikasjoner som er avhengige av dra-og-slipp-grensesnitt, for eksempel filopplastere, kanban-tavler, nettbutikkerping handlekurver og dashbordbyggere.

In Selenium WebDriver, dra og slipp utfรธres via handlinger klasse, som tilbyr spesialiserte metoder for รฅ kjede musebevegelser og utfรธre dem som en enkelt sammensatt handling.

Dra og slipp inn Selenium

Handlinger-klassen eksponerer to primรฆre metoder for dra-og-slipp-automatisering:

Syntaks:

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

Her dragAndDrop() tar kilde- og destinasjons-WebElementene, mens dragAndDropBy() tar kildeelementet og x/y-pikselforskyvningene for รฅ flytte det med.

Hvordan dra og slippe inn Selenium

De fรธlgende tre scenariene demonstrerer praktisk dra-og-slipp-automatisering pรฅ Guru99 demoside https://demo.guru99.com/test/drag_drop.htmlMรฅlet er รฅ flytte BANK debetelementet inn i Konto debetsideomrรฅdet slik at belรธpet pรฅ $5000 blir korrekt regnskapsfรธrt som en debettransaksjon.

Scenario 1: Dra og slipp ved hjelp av dra-og-slipp-metoden

I dette scenariet dras kildeelementet (BANK) til destinasjonen (kontoens debetside) ved hjelp av dragAndDrop(source, target) metode, som godtar kilde- og mรฅl-WebElements direkte.

Dra-og-slipp-scenario 1-oppsett

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

Etter at skriptet kjรธrer, BANK flisen beveger seg inn i Konto debetomrรฅdet, og belรธpet pรฅ $5000 er registrert som en debet.

Eclipse kjรธrer dra-og-slipp-skriptet

Det visuelle resultatet pรฅ demosiden ser slik ut:

Dra-og-slipp-utdataanimasjon

Scenario 2: Dra og slipp ved hjelp av dragAndDropBy-metoden

Ocuco dragAndDropBy(source, xOffset, yOffset) Metoden tilbyr presisjon pรฅ pikselnivรฅ. I stedet for รฅ slippeping Pรฅ et mรฅlelement flytter den kilden med et spesifisert antall piksler langs X- og Y-aksene.

For รฅ bestemme forskyvningen, hold musepekeren over mรฅlomrรฅdet i nettleseren din og les pikselkoordinatene med et verktรธy som inspektรธrlinjalen eller en skjermkoordinatutvidelse.

Identifisere pikselforskyvninger for 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 flytter BANK-flisen med den angitte forskyvningen og slipper den pรฅ kontodebetsiden, noe som gir samme รธkonomiske resultat som scenario 1.

Scenario 3: Dra, slipp og bekreft flere elementer

Dette scenariet kjeder sammen flere dra-og-slipp-operasjoner og verifiserer resultatet ved รฅ bekrefte det endelige belรธpet pรฅ mรฅlet. Flere kildeelementer (BANK, SALG, 5000, 500) flyttes til sine respektive debet- og kreditsoner, og skriptet bekrefter at totalene samsvarer med forventet saldo.

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

Dette mรธnsteret demonstrerer hvordan dra-og-slipp kan kombineres med pรฅstander for รฅ validere funksjonell atferd, ikke bare visuell bevegelse.

Beste praksis for dra-og-slipp-automatisering

Dra-og-slipp-tester er blant de mest ustabile skriptene i en Selenium suite fordi de er avhengige av presise musekoordinater og DOM-klarhet. Fรธlgende fremgangsmรฅter holder dem pรฅlitelige:

  • Vent pรฅ elementene: Bruk WebDriverWait med ExpectedConditions.elementToBeClickable fรธr du aktiverer dragen.
  • Foretrekker dra-og-slipp fremfor JavaSkript-hacks: Native HTML5-draghendelser trenger noen ganger en JavaSkriptreserve, men stol fรธrst pรฅ Actions API-et.
  • Rull mรฅlet inn i visningen: En destinasjon utenfor skjermen forรฅrsaker stille feil. Actions.scrollToElement eller JavaSkriptrulling fรธr draing.
  • Bekreft resultatet: Angi alltid en mรฅlbar tilstandsendring (tekst, attributt, antall) etter slippet i stedet for รฅ stole pรฅ at handlingen ble kjรธrt.
  • Kjรธr pรฅ en stabil opplรธsning: Pikselforskyvningsdrag brytes hvis viewportstรธrrelsen er forskjellig fra den som brukes til รฅ beregne forskyvningene.

Spรธrsmรฅl og svar

Dra og slipp inn Selenium er en automatisert musebevegelse som plukker opp et kildeelement og slipper det pรฅ et mรฅl. Den utfรธres via Actions-klassen ved hjelp av dragAndDrop eller dragAndDropBy.

dragAndDrop godtar kilde- og mรฅl-WebElements. dragAndDropBy tar kilden pluss x- og y-pikselforskyvninger, noe som gir presis kontroll nรฅr mรฅlelementet ikke er et diskret element.

build() kompilerer de kjedede interaksjonene til รฉn sammensatt handling, og perform() utfรธrer den. Uten perform() kjรธres aldri trinnene i kรธen mot nettleseren.

Mange HTML5-nettsteder bruker innebygde dra-hendelser som Actions API ikke alltid utlรธser. I slike tilfeller sender du dragstart-, dragover- og drop-hendelsene via executeScript som en JavaSkriptreserve.

ร…pne nettleserens DevTools, hold musepekeren over destinasjonen, og les elementets getBoundingClientRect-verdier.tract kildeposisjonen fra mรฅlposisjonen for รฅ fรฅ x- og y-forskyvningene i piksler.

Ja. Pakk inn kilde- og mรฅloppslagene i WebDriverWait med ExpectedConditions.elementToBeClickable slik at draingen bare kjรธrer etter at begge elementene er interaktive, noe som reduserer ustabilisering i CI-kjรธringer.

AI-verktรธy tilbyr selvreparerende lokaliseringsverktรธy som tilpasser seg nรฅr XPather endres, og anbefaler stabile selektorer for kilde- og mรฅlelementer. Dette reduserer vedlikehold for dra-og-slipp-pakker som kjรธrer pรฅ tvers av versjoner.

Ja. AI-kodingsassistenter gjรธr et enkelt scenario som ยซdra BANK til debetsiden og bekreft totalenยป om til en komplett handlingskjede med dra-og-slipp, bygg, utfรธr og et verifiseringstrinn.

Oppsummer dette innlegget med: