Cara Menarik dan Melepaskan Selenium (Contoh)

โšก Ringkasan Cerdas

Seret dan lepas Selenium WebDriver memungkinkan simulasi otomatis interaksi berbasis mouse yang memindahkan elemen sumber dan melepaskannya pada target yang ditentukan. Kelas Actions mendukung gerakan ini melalui metode dragAndDrop dan dragAndDropBy untuk otomatisasi browser yang tepat dan dapat diulang.

  • ๐ŸŽ“ Gunakan kelas Actions untuk membuat gestur keyboard dan mouse, lalu panggil build() dan perform() untuk mengeksekusinya di halaman.
  • ๐ŸŒŸ Pilih dragAndDrop(source, target) jika Anda memiliki kedua elemen, dan dragAndDropBy(source, xOffset, yOffset) jika Anda membutuhkan presisi tingkat piksel.
  • ๐Ÿš€ Selalu tunggu hingga elemen sumber dan target hadir sebelum menjalankan operasi seret untuk menghindari pengujian yang tidak stabil.
  • ๐ŸŽ–๏ธ Verifikasi jatuhnya objek secara visual atau dengan memastikan perubahan atribut pada target agar pengujian mengkonfirmasi interaksi nyata, bukan hanya tindakan yang diantrekan.
  • ๐Ÿ† Pencari lokasi berbasis AI memperbaiki XPath yang rusak setelah pembaruan UI, mengurangi pemeliharaan untuk rangkaian drag-and-drop yang berjalan di pipeline CI.

Seret dan lepas Selenium

Apa itu Drag and Drop? Selenium?

Seret dan lepas Selenium adalah interaksi otomatis yang mensimulasikan mengklik dan menahan elemen sumber, memindahkannya di halaman, dan melepaskannya di lokasi target. Ini banyak digunakan untuk menguji aplikasi web modern yang mengandalkan antarmuka seret dan lepas, seperti pengunggah file, papan kanban, toko online, dan lain-lain.ping keranjang belanja, dan pembuat dasbor.

In Selenium WebDriver, fungsi seret dan lepas dilakukan melalui tindakan kelas ini menyediakan metode khusus untuk menggabungkan gerakan mouse dan mengeksekusinya sebagai satu tindakan gabungan.

Seret dan lepas Selenium

Kelas Actions mengekspos dua metode utama untuk otomatisasi seret dan lepas:

sintaks:

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();

Di sini, dragAndDrop() mengambil WebElements sumber dan tujuan, sementara dragAndDropBy() mengambil elemen sumber dan offset piksel x/y untuk memindahkannya.

Cara Menarik dan Melepaskan Selenium

Tiga skenario berikut mendemonstrasikan otomatisasi seret dan lepas praktis pada GuruHalaman demo 99 https://demo.guru99.com/test/drag_drop.htmlTujuannya adalah untuk memindahkan BANK elemen debit ke dalam Akun area sisi debit sehingga jumlah $5000 dicatat dengan benar sebagai transaksi debit.

Skenario 1: Seret dan Lepas menggunakan metode dragAndDrop

Dalam skenario ini, elemen sumber (BANK) diseret ke tujuan (sisi debit Rekening) menggunakan dragAndDrop(source, target) Metode ini menerima WebElements sumber dan tujuan secara langsung.

Pengaturan Skenario 1 dengan metode Seret dan Lepas.

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();
    }
}

Setelah skrip dijalankan, maka... BANK ubin bergerak ke dalam Akun area debit dan jumlah $5000 terdaftar sebagai debit.

Eclipse menjalankan skrip seret dan lepas

Hasil visual pada halaman demo terlihat seperti ini:

Animasi keluaran seret dan lepas

Skenario 2: Seret dan Lepas menggunakan metode dragAndDropBy

The dragAndDropBy(source, xOffset, yOffset) Metode ini menawarkan presisi tingkat piksel. Alih-alih menjatuhkanping Pada elemen target, ia menggeser sumber sebanyak sejumlah piksel tertentu di sepanjang sumbu X dan Y.

Untuk menentukan offset, arahkan kursor ke area tujuan di browser Anda dan baca koordinat piksel dengan alat seperti penggaris inspektur atau ekstensi koordinat layar.

Mengidentifikasi offset piksel untuk 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();
    }
}

Skrip tersebut memindahkan ubin BANK dengan offset yang diberikan dan menempatkannya di sisi debit Akun, menghasilkan hasil keuangan yang sama seperti Skenario 1.

Skenario 3: Seret, lepas, dan verifikasi beberapa elemen

Skenario ini menggabungkan beberapa operasi seret dan lepas (drag-and-drop) dan memverifikasi hasilnya dengan menegaskan jumlah akhir pada target. Beberapa elemen sumber (BANK, SALES, 5000, 500) dipindahkan ke zona debit dan kredit masing-masing, dan skrip mengkonfirmasi bahwa totalnya sesuai dengan saldo yang diharapkan.

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);
        }
    }
}

Pola ini menunjukkan bagaimana fungsi seret dan lepas (drag-and-drop) dapat dikombinasikan dengan pernyataan (assertions) untuk memvalidasi perilaku fungsional, bukan hanya pergerakan visual.

Praktik Terbaik untuk Otomatisasi Seret dan Lepas

Pengujian seret dan lepas termasuk di antara skrip yang paling tidak stabil. Selenium Suite ini kurang andal karena bergantung pada koordinat mouse yang tepat dan kesiapan DOM. Praktik-praktik berikut menjaga keandalannya:

  • Tunggu hingga elemen-elemen tersedia: penggunaan WebDriverWait dengan ExpectedConditions.elementToBeClickable sebelum melakukan drag.
  • Lebih suka fitur seret dan lepas daripada JavaTrik skrip: Peristiwa seret (drag) HTML5 asli terkadang membutuhkan JavaSkrip cadangan, tetapi utamakan API Actions.
  • Gulir target hingga terlihat: Tujuan yang tidak ditampilkan di layar menyebabkan kegagalan tanpa pemberitahuan. Gunakan Actions.scrollToElement atau JavaGulir skrip sebelum menyeret.
  • Verifikasi hasilnya: Selalu pastikan adanya perubahan status yang terukur (teks, atribut, jumlah) setelah penghapusan, alih-alih hanya mengandalkan bahwa aksi telah dijalankan.
  • Jalankan pada resolusi yang stabil: Pergeseran piksel akan gagal jika ukuran viewport berbeda dari ukuran yang digunakan untuk menghitung offset.

Pertanyaan Umum Demo Slot

Seret dan lepas ke dalam Selenium adalah gerakan mouse otomatis yang mengambil elemen sumber dan melepaskannya pada target. Gerakan ini dilakukan melalui kelas Actions menggunakan dragAndDrop atau dragAndDropBy.

dragAndDrop menerima WebElement sumber dan tujuan. dragAndDropBy mengambil sumber ditambah offset piksel x dan y, memberikan kontrol yang tepat ketika tujuan bukan elemen terpisah.

Fungsi build() mengkompilasi interaksi berantai menjadi satu Action komposit tunggal, dan fungsi perform() mengeksekusinya. Tanpa fungsi perform(), langkah-langkah yang diantrekan tidak akan pernah dijalankan di browser.

Banyak situs HTML5 menggunakan event drag bawaan yang tidak selalu dipicu oleh Actions API. Dalam kasus tersebut, kirimkan event dragstart, dragover, dan drop melalui executeScript sebagai sebuah JavaSkrip cadangan.

Buka DevTools browser, arahkan kursor ke tujuan, dan baca nilai getBoundingClientRect elemen tersebut. SubtracPindahkan posisi sumber dari posisi target untuk mendapatkan offset x dan y dalam piksel.

Ya. Bungkus pencarian sumber dan target dalam WebDriverWait dengan ExpectedConditions.elementToBeClickable sehingga proses seret hanya berjalan setelah kedua elemen interaktif, mengurangi ketidakstabilan dalam menjalankan CI.

Alat AI menyediakan locator yang dapat memperbaiki diri sendiri dan beradaptasi ketika XPath berubah, serta merekomendasikan selector yang stabil untuk elemen sumber dan target. Hal ini mengurangi pemeliharaan untuk rangkaian drag-and-drop yang berjalan di berbagai rilis.

Ya. Asisten pengkodean AI mengubah skenario bahasa Inggris sederhana seperti "seret BANK ke sisi debit dan pastikan totalnya" menjadi rangkaian Tindakan lengkap dengan langkah seret dan lepas, membangun, menjalankan, dan verifikasi.

Ringkaslah postingan ini dengan: