Τρόπος μεταφοράς και απόθεσης Selenium (Παράδειγμα)

⚡ Έξυπνη Σύνοψη

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

  • 🎓 Χρησιμοποιήστε την κλάση Actions για να δημιουργήσετε χειρονομίες πληκτρολογίου και ποντικιού και, στη συνέχεια, καλέστε την build() και την perform() για να τις εκτελέσετε στη σελίδα.
  • 🌟 Επιλέξτε dragAndDrop(source, target) όταν έχετε και τα δύο στοιχεία και dragAndDropBy(source, xOffset, yOffset) όταν χρειάζεστε ακρίβεια σε επίπεδο pixel.
  • 🚀 Να περιμένετε πάντα να υπάρχουν τα στοιχεία πηγής και στόχου πριν ενεργοποιήσετε τη λειτουργία μεταφοράς, για να αποφύγετε ασταθείς δοκιμές.
  • 🎖️ Επαληθεύστε την απόρριψη οπτικά ή βεβαιώνοντας αλλαγές χαρακτηριστικών στον στόχο, ώστε η δοκιμή να επιβεβαιώσει την πραγματική αλληλεπίδραση, όχι απλώς μια ενέργεια σε ουρά.
  • 🏆 Οι εντοπιστές με τη βοήθεια της τεχνητής νοημοσύνης επιδιορθώνουν τα προβληματικά XPaths μετά από ενημερώσεις του UI, μειώνοντας τη συντήρηση για σουίτες μεταφοράς και απόθεσης που εκτελούνται σε αγωγούς CI.

Σύρσιμο και απόθεση Selenium

Τι είναι η μεταφορά και απόθεση Selenium?

Σύρσιμο και απόθεση Selenium είναι μια αυτοματοποιημένη αλληλεπίδραση που προσομοιώνει το κλικ και το κράτημα ενός στοιχείου πηγής, τη μετακίνησή του στη σελίδα και την απελευθέρωσή του σε μια στοχευμένη θέση. Χρησιμοποιείται ευρέως για τη δοκιμή σύγχρονων εφαρμογών ιστού που βασίζονται σε διεπαφές μεταφοράς και απόθεσης, όπως προγράμματα μεταφόρτωσης αρχείων, πίνακες kanban, καταστήματα καταστημάτων.ping καροτσάκια και κατασκευαστές ταμπλό.

In Selenium WebDriver, η μεταφορά και η απόθεση εκτελούνται μέσω του Δράσεις κλάση, η οποία παρέχει εξειδικευμένες μεθόδους για την αλυσιδωτή εκτέλεση κινήσεων του ποντικιού ως μία μόνο σύνθετη ενέργεια.

Σύρσιμο και απόθεση Selenium

Η κλάση 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 προέλευσης και προορισμού.

Ρύθμιση Σεναρίου 1 με Σύρσιμο και Απόθεση

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 $ καταχωρείται ως χρέωση.

Eclipse εκτέλεση του σεναρίου μεταφοράς και απόθεσης

Το οπτικό αποτέλεσμα στη σελίδα επίδειξης μοιάζει με αυτό:

Κινούμενη εικόνα εξόδου με μεταφορά και απόθεση

Σενάριο 2: Μεταφορά και απόθεση χρησιμοποιώντας τη μέθοδο dragAndDropBy

The dragAndDropBy(source, xOffset, yOffset) η μέθοδος προσφέρει ακρίβεια σε επίπεδο pixel. Αντί για πτώσηping Σε ένα στοιχείο-στόχο, μετακινεί την πηγή κατά έναν καθορισμένο αριθμό pixel κατά μήκος των αξόνων X και Y.

Για να προσδιορίσετε την μετατόπιση, τοποθετήστε τον δείκτη του ποντικιού πάνω από την περιοχή προορισμού στο πρόγραμμα περιήγησής σας και διαβάστε τις συντεταγμένες των pixel με ένα εργαλείο όπως ο χάρακας επιθεώρησης ή μια επέκταση συντεταγμένων οθόνης.

Προσδιορισμός μετατοπίσεων pixel για 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();
    }
}

Το σενάριο μετακινεί το πλακίδιο ΤΡΑΠΕΖΑΣ κατά την παρεχόμενη μετατόπιση και το αποθέτει στην πλευρά χρέωσης του Λογαριασμού, παράγοντας το ίδιο οικονομικό αποτέλεσμα με το Σενάριο 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) διακόπτει τη μεταφορά εάν το μέγεθος του παραθύρου προβολής διαφέρει από αυτό που χρησιμοποιείται για τον υπολογισμό των μετατοπίσεων.

Συχνές Ερωτήσεις

Σύρσιμο και απόθεση Selenium είναι μια αυτοματοποιημένη χειρονομία ποντικιού που λαμβάνει ένα στοιχείο πηγής και το απελευθερώνει σε έναν στόχο. Εκτελείται μέσω της κλάσης Actions χρησιμοποιώντας dragAndDrop ή dragAndDropBy.

Το dragAndDrop δέχεται τα WebElements πηγής και προορισμού. Το dragAndDropBy δέχεται την πηγή συν τις μετατοπίσεις pixel x και y, παρέχοντας ακριβή έλεγχο όταν ο προορισμός δεν είναι ένα διακριτό στοιχείο.

Η build() μεταγλωττίζει τις αλυσιδωτές αλληλεπιδράσεις σε μία μόνο σύνθετη ενέργεια και την εκτελεί η perform(). Χωρίς την perform(), τα βήματα στην ουρά δεν εκτελούνται ποτέ στο πρόγραμμα περιήγησης.

Πολλές ιστοσελίδες HTML5 χρησιμοποιούν εγγενή συμβάντα dragstart που δεν ενεργοποιούνται πάντα από το Actions API. Σε αυτές τις περιπτώσεις, αποστείλετε τα συμβάντα dragstart, dragover και drop μέσω του executeScript ως JavaΕφεδρικό σενάριο.

Ανοίξτε το DevTools του προγράμματος περιήγησης, τοποθετήστε τον δείκτη του ποντικιού πάνω από τον προορισμό και διαβάστε τις τιμές getBoundingClientRect του στοιχείου. Subtracτη θέση πηγής από τη θέση στόχου για να λάβετε τις μετατοπίσεις x και y σε pixel.

Ναι. Τυλίξτε τις αναζητήσεις προέλευσης και προορισμού στο WebDriverWait με το ExpectedConditions.elementToBeClickable, ώστε η μεταφορά να εκτελείται μόνο αφού και τα δύο στοιχεία είναι αλληλεπιδραστικά, μειώνοντας την ασταθή εκτέλεση στις εκτελέσεις CI.

Τα εργαλεία τεχνητής νοημοσύνης παρέχουν αυτοεπιδιορθούμενους εντοπιστές που προσαρμόζονται όταν αλλάζουν τα XPaths και προτείνουν σταθερούς επιλογείς για τα στοιχεία προέλευσης και προορισμού. Αυτό μειώνει τη συντήρηση για τις σουίτες μεταφοράς και απόθεσης που εκτελούνται σε όλες τις εκδόσεις.

Ναι. Οι βοηθοί κωδικοποίησης τεχνητής νοημοσύνης μετατρέπουν ένα απλό σενάριο όπως «σύρετε την ΤΡΑΠΕΖΑ στην πλευρά της χρέωσης και επιβεβαιώστε το σύνολο» σε μια ολοκληρωμένη αλυσίδα ενεργειών με dragAndDrop, δημιουργία, εκτέλεση και ένα βήμα επαλήθευσης.

Συνοψίστε αυτήν την ανάρτηση με: