Kuinka vetää ja pudottaa sisään Selenium (Esimerkki)
⚡ Älykäs yhteenveto
Vedä ja pudota sisään Selenium WebDriver mahdollistaa hiirellä tehtävien vuorovaikutusten automaattisen simuloinnin, joissa lähdeelementtiä siirretään ja se vapautetaan määritetyssä kohteessa. Actions-luokka tukee näitä eleitä dragAndDrop- ja dragAndDropBy-metodien avulla tarkkaa ja toistettavaa selainautomaatiota varten.

Mikä on vetäminen ja pudottaminen Selenium?
Vedä ja pudota sisään Selenium on automatisoitu vuorovaikutus, joka simuloi lähdeelementin napsauttamista ja pitämistä painettuna, sen siirtämistä sivulla ja sen vapauttamista kohdepaikassa. Sitä käytetään laajalti testaamaan nykyaikaisia verkkosovelluksia, jotka perustuvat vedä ja pudota -käyttöliittymiin, kuten tiedostojen latausohjelmiin, kanban-tauluihin, verkkokauppaanping kärryt ja kojelaudan rakentajat.
In Selenium WebDriver, vedä ja pudota -toiminto suoritetaan Toiminnot luokka, joka tarjoaa erikoistuneita metodeja hiiren eleiden ketjuttamiseen ja niiden suorittamiseen yhtenä yhdistelmätoimintona.
Actions-luokka tarjoaa kaksi ensisijaista menetelmää vedä ja pudota -automaatiolle:
Syntaksi:
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();
Täällä dragAndDrop() ottaa lähde- ja kohde-WebElementit, kun taas dragAndDropBy() ottaa lähdeelementin ja x/y-pikselioffsetit siirtääkseen sitä.
Kuinka vetää ja pudottaa sisään Selenium
Seuraavat kolme skenaariota havainnollistavat käytännön vetämällä ja pudottamalla tapahtuvaa automaatiota Guru99 demosivu https://demo.guru99.com/test/drag_drop.htmlTavoitteena on siirtää PANKKI veloituselementti Tili debet-puolen alueella, jotta 5000 dollarin summa kirjataan oikein debit-tapahtumaksi.
Skenaario 1: Vedä ja pudota dragAndDrop-metodilla
Tässä skenaariossa lähdeelementti (PANKKI) vedetään kohteeseen (tilin veloituspuoli) käyttämällä dragAndDrop(source, target) metodi, joka hyväksyy lähde- ja kohde-WebElementit suoraan.
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();
}
}
Skriptin suorittamisen jälkeen PANKKI laatta siirtyy sisään Tili debit-alueella ja 5000 dollarin summa rekisteröidään debitiksi.
Demosivun visuaalinen tulos näyttää tältä:
Skenaario 2: Vedä ja pudota dragAndDropBy-metodilla
dragAndDropBy(source, xOffset, yOffset) menetelmä tarjoaa pikselitason tarkkuuden. Pudotuksen sijaanping kohdeelementissä se siirtää lähdettä tietyn määrän pikseleitä X- ja Y-akseleita pitkin.
Voit määrittää siirtymän viemällä hiiren osoittimen kohdealueen päälle selaimessasi ja lukemalla pikselikoordinaatit työkalulla, kuten tarkastusviivaimella tai näyttökoordinaatit-laajennuksella.
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();
}
}
Skripti siirtää BANK-ruutua annetun siirtymän verran ja pudottaa sen tilin veloituspuolelle, jolloin tuloksena on sama taloudellinen tulos kuin skenaariossa 1.
Skenaario 3: Vedä, pudota ja tarkista useita elementtejä
Tässä skenaariossa ketjutetaan useita vedä ja pudota -operaatioita ja varmistetaan tulos asettamalla lopullinen summa kohteeseen. Useita lähdeelementtejä (PANKKI, MYYNTI, 5000, 500) siirretään omille debit- ja kredit-alueilleen, ja skripti vahvistaa, että kokonaissummat vastaavat odotettua saldoa.
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);
}
}
}
Tämä malli osoittaa, kuinka vetämällä ja pudottamalla voidaan validoida toiminnallista käyttäytymistä, ei pelkästään visuaalista liikettä.
Vedä ja pudota -automaation parhaat käytännöt
Vedä ja pudota -testit ovat epävakaimpia skriptejä Selenium sviittiä, koska ne ovat riippuvaisia tarkoista hiiren koordinaateista ja DOM-valmiudesta. Seuraavat käytännöt pitävät ne luotettavina:
- Odota elementtejä: Käyttää
WebDriverWaitExpectedConditions.elementToBeClickableennen vedon käynnistämistä. - Mieluummin vedä ja pudota kuin JavaSkriptihakkeroinnit: Natiivit HTML5-vetotapahtumat tarvitsevat joskus JavaSkriptin vararatkaisu, mutta käytä ensin Actions API:a.
- Vieritä kohde näkyviin: Näytön ulkopuolinen kohde aiheuttaa hiljaisia virheitä.
Actions.scrollToElementtai JavaSkriptin vieritys ennen vetämistä. - Varmista tulos: Väitä aina mitattavaa tilanmuutosta (teksti, attribuutti, määrä) pudotuksen jälkeen sen sijaan, että luottaisit toiminnon suorittamiseen.
- Suorita vakaalla resoluutiolla: Pikselioffset-vetoketjut katkeavat, jos näyttöalueen koko poikkeaa offset-arvojen laskemiseen käytetystä koosta.





