Τρόπος μεταφοράς και απόθεσης Selenium (Παράδειγμα)
⚡ Έξυπνη Σύνοψη
Σύρσιμο και απόθεση Selenium Το WebDriver επιτρέπει την αυτοματοποιημένη προσομοίωση αλληλεπιδράσεων που βασίζονται στο ποντίκι, οι οποίες μετακινούν ένα στοιχείο πηγής και το απελευθερώνουν σε έναν καθορισμένο στόχο. Η κλάση Actions τροφοδοτεί αυτές τις χειρονομίες μέσω των μεθόδων dragAndDrop και dragAndDropBy για ακριβή, επαναλήψιμη αυτοματοποίηση του προγράμματος περιήγησης.

Τι είναι η μεταφορά και απόθεση Selenium?
Σύρσιμο και απόθεση Selenium είναι μια αυτοματοποιημένη αλληλεπίδραση που προσομοιώνει το κλικ και το κράτημα ενός στοιχείου πηγής, τη μετακίνησή του στη σελίδα και την απελευθέρωσή του σε μια στοχευμένη θέση. Χρησιμοποιείται ευρέως για τη δοκιμή σύγχρονων εφαρμογών ιστού που βασίζονται σε διεπαφές μεταφοράς και απόθεσης, όπως προγράμματα μεταφόρτωσης αρχείων, πίνακες kanban, καταστήματα καταστημάτων.ping καροτσάκια και κατασκευαστές ταμπλό.
In Selenium WebDriver, η μεταφορά και η απόθεση εκτελούνται μέσω του Δράσεις κλάση, η οποία παρέχει εξειδικευμένες μεθόδους για την αλυσιδωτή εκτέλεση κινήσεων του ποντικιού ως μία μόνο σύνθετη ενέργεια.
Η κλάση Actions παρουσιάζει δύο κύριες μεθόδους για αυτοματοποίηση drag-and-drop:
Σύνταξη:
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();
Εδώ, dragAndDrop() παίρνει τα WebElements πηγής και προορισμού, ενώ dragAndDropBy() παίρνει το στοιχείο πηγής και τις μετατοπίσεις εικονοστοιχείων x/y για να το μετακινήσει.
Τρόπος μεταφοράς και απόθεσης Selenium
Τα ακόλουθα τρία σενάρια παρουσιάζουν πρακτική αυτοματοποίηση μεταφοράς και απόθεσης στο Guru99 σελίδα επίδειξης https://demo.guru99.com/test/drag_drop.htmlΟ στόχος είναι να μετακινηθεί το ΤΡΑΠΕΖΑ στοιχείο χρέωσης στο Λογαριασμός περιοχή της χρεωστικής πλευράς, έτσι ώστε το ποσό των 5000 $ να λογίζεται σωστά ως συναλλαγή χρέωσης.
Σενάριο 1: Σύρσιμο και απόθεση χρησιμοποιώντας τη μέθοδο dragAndDrop
Σε αυτό το σενάριο, το στοιχείο προέλευσης (ΤΡΑΠΕΖΑ) σύρεται στον προορισμό (πλευρά χρέωσης λογαριασμού) χρησιμοποιώντας το dragAndDrop(source, target) μέθοδος, η οποία δέχεται απευθείας τα WebElements προέλευσης και προορισμού.
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();
}
}
Μετά την εκτέλεση του σεναρίου, το ΤΡΑΠΕΖΑ το πλακίδιο μετακινείται στο Λογαριασμός χρεωστική περιοχή και το ποσό των 5000 $ καταχωρείται ως χρέωση.
Το οπτικό αποτέλεσμα στη σελίδα επίδειξης μοιάζει με αυτό:
Σενάριο 2: Μεταφορά και απόθεση χρησιμοποιώντας τη μέθοδο dragAndDropBy
The dragAndDropBy(source, xOffset, yOffset) η μέθοδος προσφέρει ακρίβεια σε επίπεδο pixel. Αντί για πτώσηping Σε ένα στοιχείο-στόχο, μετακινεί την πηγή κατά έναν καθορισμένο αριθμό pixel κατά μήκος των αξόνων X και Y.
Για να προσδιορίσετε την μετατόπιση, τοποθετήστε τον δείκτη του ποντικιού πάνω από την περιοχή προορισμού στο πρόγραμμα περιήγησής σας και διαβάστε τις συντεταγμένες των pixel με ένα εργαλείο όπως ο χάρακας επιθεώρησης ή μια επέκταση συντεταγμένων οθόνης.
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();
}
}
Το σενάριο μετακινεί το πλακίδιο ΤΡΑΠΕΖΑΣ κατά την παρεχόμενη μετατόπιση και το αποθέτει στην πλευρά χρέωσης του Λογαριασμού, παράγοντας το ίδιο οικονομικό αποτέλεσμα με το Σενάριο 1.
Σενάριο 3: Σύρετε, αποθέστε και επαληθεύστε πολλά στοιχεία
Αυτό το σενάριο συνδυάζει πολλαπλές λειτουργίες μεταφοράς και απόθεσης και επαληθεύει το αποτέλεσμα δηλώνοντας το τελικό ποσό στον στόχο. Αρκετά στοιχεία πηγής (ΤΡΑΠΕΖΑ, ΠΩΛΗΣΕΙΣ, 5000, 500) μετακινούνται στις αντίστοιχες ζώνες χρέωσης και πίστωσης και το σενάριο επιβεβαιώνει ότι τα σύνολα αντιστοιχούν στο αναμενόμενο υπόλοιπο.
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);
}
}
}
Αυτό το μοτίβο καταδεικνύει πώς η μεταφορά και απόθεση μπορεί να συνδυαστεί με ισχυρισμούς για την επικύρωση λειτουργικής συμπεριφοράς, όχι μόνο οπτικής κίνησης.
καλυτερα Practices for Drag and Drop Automation
Οι δοκιμές μεταφοράς και απόθεσης είναι από τα πιο ασταθή σενάρια σε ένα Selenium είναι κατάλληλα επειδή εξαρτώνται από τις ακριβείς συντεταγμένες του ποντικιού και την ετοιμότητα του DOM. Οι ακόλουθες πρακτικές τα διατηρούν αξιόπιστα:
- Περιμένετε για στοιχεία: Χρήση
WebDriverWaitμαζί σου,ExpectedConditions.elementToBeClickableπριν επικαλεστεί την οπισθέλκουσα. - Προτίμηση dragAndDrop αντί JavaΚόλπα σεναρίων: Τα εγγενή συμβάντα μεταφοράς HTML5 μερικές φορές χρειάζονται ένα JavaΕφεδρικό σενάριο, αλλά βασιστείτε πρώτα στο Actions API.
- Κάντε κύλιση του στόχου στην προβολή: Ένας προορισμός εκτός οθόνης προκαλεί σιωπηλές αποτυχίες. Χρησιμοποιήστε το
Actions.scrollToElementείτε για JavaΚύλιση σεναρίου πριν από τη μεταφορά. - Επαληθεύστε το αποτέλεσμα: Να δηλώνετε πάντα μια μετρήσιμη αλλαγή κατάστασης (κείμενο, χαρακτηριστικό, πλήθος) μετά την απόρριψη αντί να εμπιστεύεστε την εκτέλεση της ενέργειας.
- Εκτέλεση σε σταθερή ανάλυση: Η μετατόπιση εικονοστοιχείων (pixel-offset) διακόπτει τη μεταφορά εάν το μέγεθος του παραθύρου προβολής διαφέρει από αυτό που χρησιμοποιείται για τον υπολογισμό των μετατοπίσεων.





