Kako povući i ispustiti Selenium (Primjer)
⚡ Pametni sažetak
Povuci i ispusti Selenium WebDriver omogućuje automatiziranu simulaciju interakcija mišem koje pomiču izvorni element i otpuštaju ga na definiranom cilju. Klasa Actions pokreće ove geste putem metoda dragAndDrop i dragAndDropBy za preciznu i ponovljivu automatizaciju preglednika.

Što je "povuci i ispusti" Selenium?
Povuci i ispusti Selenium je automatizirana interakcija koja simulira klik i držanje izvornog elementa, njegovo pomicanje po stranici i otpuštanje na ciljnoj lokaciji. Široko se koristi za testiranje modernih web aplikacija koje se oslanjaju na sučelja s funkcijom "povuci i ispusti", kao što su programi za prijenos datoteka, kanban ploče, trgovineping kolica i alate za izradu nadzornih ploča.
In Selenium WebDriver, povlačenje i ispuštanje se izvodi putem Akcije klasa koja pruža specijalizirane metode za lančanje gesti miša i njihovo izvršavanje kao jedne složene akcije.
Klasa Actions otkriva dvije primarne metode za automatizaciju povlačenja i ispuštanja:
Sintaksa:
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();
Ovdje, dragAndDrop() uzima izvorne i odredišne WebElemente, dok dragAndDropBy() uzima izvorni element i x/y pomake piksela za koje ga pomiče.
Kako povući i ispustiti Selenium
Sljedeća tri scenarija demonstriraju praktičnu automatizaciju povlačenja i ispuštanja na Guru99 demo stranica https://demo.guru99.com/test/drag_drop.htmlCilj je pomaknuti BANKE teretni element u Korisnički račun područje zaduženja kako bi se iznos od 5000 USD ispravno evidentirao kao zadužena transakcija.
Scenarij 1: Povlačenje i ispuštanje pomoću metode dragAndDrop
U ovom scenariju, izvorni element (BANK) se povlači na odredište (debitna strana računa) pomoću dragAndDrop(source, target) metoda koja izravno prihvaća izvorne i odredišne WebElemente.
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();
}
}
Nakon što se skripta pokrene, BANKE pločica se pomiče u Korisnički račun područje zaduženja i iznos od 5000 USD registriran je kao zaduženje.
Vizualni rezultat na demo stranici izgleda ovako:
Scenarij 2: Povlačenje i ispuštanje pomoću metode dragAndDropBy
The dragAndDropBy(source, xOffset, yOffset) metoda nudi preciznost na razini piksela. Umjesto padaping na ciljnom elementu pomiče izvor za određeni broj piksela duž X i Y osi.
Za određivanje pomaka, zadržite pokazivač iznad odredišnog područja u pregledniku i očitajte koordinate piksela alatom poput inspektorskog ravnala ili proširenja za koordinate zaslona.
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();
}
}
Skripta pomiče pločicu BANK za zadani pomak i spušta je na terećenje računa, proizvodeći isti financijski rezultat kao u scenariju 1.
Scenarij 3: Povucite, ispustite i provjerite više elemenata
Ovaj scenarij povezuje više operacija povlačenja i ispuštanja te provjerava rezultat potvrđivanjem konačnog iznosa na cilju. Nekoliko izvornih elemenata (BANK, SALES, 5000, 500) premješta se u odgovarajuće debitne i kreditne zone, a skripta potvrđuje da ukupni iznosi odgovaraju očekivanom stanju.
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);
}
}
}
Ovaj uzorak pokazuje kako se povlačenje i ispuštanje može kombinirati s tvrdnjama za validaciju funkcionalnog ponašanja, ne samo vizualnog kretanja.
Najbolje prakse za automatizaciju povlačenja i ispuštanja
Testovi "drag-and-drop" su među najnepouzdanijim skriptama u Selenium paketa jer ovise o preciznim koordinatama miša i spremnosti DOM-a. Sljedeće prakse ih održavaju pouzdanima:
- Pričekajte elemente: Koristiti
WebDriverWaitsaExpectedConditions.elementToBeClickableprije pozivanja povlačenja. - Preferiraj dragAndDrop u odnosu na JavaTrikovi za skripte: Izvorni HTML5 događaji povlačenja ponekad trebaju JavaRezervna skripta, ali se prvo oslonite na Actions API.
- Pomaknite cilj u prikaz: Odredište izvan zaslona uzrokuje tihe pogreške. Koristite
Actions.scrollToElementili JavaPomicanje skripte prije povlačenja. - Provjerite ishod: Uvijek potvrdite mjerljivu promjenu stanja (tekst, atribut, broj) nakon ispuštanja umjesto da vjerujete da je akcija izvršena.
- Pokreni na stabilnoj rezoluciji: Povlačenje pomaka piksela prekida se ako se veličina prikaza razlikuje od one koja se koristi za izračun pomaka.





