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.

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.
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.
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.
Det visuelle resultatet pรฅ demosiden ser slik ut:
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.
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
WebDriverWaitmedExpectedConditions.elementToBeClickablefรธ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.scrollToElementeller 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.





