Как перетащить Selenium (Пример)

⚡ Умное резюме

Перетащите и вставьте Selenium WebDriver позволяет автоматически имитировать взаимодействия с мышью, перемещая исходный элемент и отпуская его в заданной точке. Класс Actions обеспечивает выполнение этих жестов с помощью методов dragAndDrop и dragAndDropBy для точной и воспроизводимой автоматизации в браузере.

  • 🎓 Используйте класс Actions для создания жестов клавиатуры и мыши, а затем вызовите методы build() и perform() для их выполнения на странице.
  • 🌟 Выбирайте dragAndDrop(source, target), если у вас есть оба элемента, и dragAndDropBy(source, xOffset, yOffset), если вам нужна точность до пикселя.
  • 🚀 Всегда дождитесь появления исходного и целевого элементов перед выполнением операции перетаскивания, чтобы избежать нестабильных тестов.
  • 🎖️ Проверьте факт выпадения объекта визуально или путем проверки изменений атрибутов целевого объекта, чтобы тест подтвердил реальное взаимодействие, а не просто действие, поставленное в очередь.
  • 🏆 Локализаторы с поддержкой ИИ исправляют неработающие XPath-пути после обновлений пользовательского интерфейса, сокращая затраты на обслуживание наборов инструментов перетаскивания, работающих в конвейерах CI.

Перетащите и вставьте Selenium

Что такое перетаскивание (Drag and Drop)? Selenium?

Перетащите и вставьте Selenium Это автоматизированное взаимодействие, имитирующее нажатие и удержание элемента-источника, его перемещение по странице и отпускание в целевом месте. Оно широко используется для тестирования современных веб-приложений, использующих интерфейсы перетаскивания, таких как загрузчики файлов, канбан-доски, интернет-магазины.ping корзины и конструкторы панелей управления.

In Selenium WebDriver, перетаскивание осуществляется через Действия класс, предоставляющий специализированные методы для объединения жестов мыши и их выполнения в виде единого составного действия.

Перетащите и вставьте Selenium

Класс Actions предоставляет два основных метода для автоматизации перетаскивания элементов:

Синтаксис:

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() принимает исходные и целевые веб-элементы, а 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

dragAndDropBy(source, xOffset, yOffset) Этот метод обеспечивает точность на уровне пикселей. Вместо отбрасыванияping При перемещении целевого элемента источник перемещается на заданное количество пикселей вдоль осей X и Y.

Чтобы определить смещение, наведите курсор на целевую область в браузере и считайте пиксельные координаты с помощью такого инструмента, как линейка инспектора или расширение для отображения экранных координат.

Определение смещения пикселей для функции 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();
    }
}

Скрипт перемещает плитку BANK на заданное смещение и размещает ее на стороне дебета счета, получая тот же финансовый результат, что и в Сценарии 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);
        }
    }
}

Этот пример демонстрирует, как перетаскивание элементов можно комбинировать с утверждениями для проверки функционального поведения, а не только визуального перемещения.

Рекомендации по автоматизации с помощью перетаскивания

Тесты с использованием перетаскивания относятся к числу наиболее ненадежных скриптов в программировании. Selenium Этот набор инструментов работает, поскольку зависит от точных координат мыши и готовности DOM-элементов. Следующие методы обеспечивают их надежную работу:

  • Дождитесь появления элементов: Используйте WebDriverWait с ExpectedConditions.elementToBeClickable перед тем, как начать перетаскивание.
  • Предпочитаю перетаскивание (dragAndDrop). JavaВзлом скриптов: Встроенные события перетаскивания HTML5 иногда требуют JavaВ качестве резервного варианта можно использовать скрипт, но в первую очередь следует полагаться на API действий.
  • Прокрутите целевой объект, чтобы он отобразился: Указание адреса, находящегося вне поля зрения, приводит к скрытым сбоям. Actions.scrollToElement или JavaПеред перетаскиванием прокрутите скрипт.
  • Проверьте результат: Всегда фиксируйте измеримое изменение состояния (текст, атрибут, количество) после перетаскивания, вместо того чтобы полагаться на то, что действие уже выполнено.
  • Запускать на стабильном разрешении: Перетаскивание с пиксельным смещением перестаёт работать, если размер области просмотра отличается от размера, использованного для вычисления смещений.

Часто задаваемые вопросы (FAQ)

Перетащите и вставьте Selenium Это автоматизированный жест мыши, который захватывает исходный элемент и отпускает его на целевом элементе. Он выполняется через класс Actions с помощью функций dragAndDrop или dragAndDropBy.

Функция dragAndDrop принимает в качестве исходных и целевых веб-элементов. Функция dragAndDropBy принимает в качестве исходных элементов координаты x и y в пикселях, обеспечивая точный контроль, когда целевой элемент не является дискретным элементом.

Функция build() объединяет цепочку взаимодействий в единое составное действие, а функция perform() его выполняет. Без функции perform() шаги, поставленные в очередь, никогда не будут выполнены в браузере.

Многие сайты на HTML5 используют встроенные события перетаскивания, которые не всегда срабатывают через Actions API. В таких случаях события dragstart, dragover и drop следует отправлять через executeScript. JavaРезервный вариант скрипта.

Откройте инструменты разработчика в браузере, наведите курсор на нужный элемент и прочитайте значения метода getBoundingClientRect этого элемента. ПодпрограммаtracЧтобы получить смещения по осям x и y в пикселях, нужно вывести координаты источника относительно целевой позиции.

Да. Оберните поиск источника и цели в WebDriverWait с ExpectedConditions.elementToBeClickable, чтобы перетаскивание выполнялось только после того, как оба элемента станут интерактивными, что уменьшит нестабильность при запуске CI.

Инструменты искусственного интеллекта предоставляют самовосстанавливающиеся локаторы, которые адаптируются при изменении XPath-путей и рекомендуют стабильные селекторы для исходных и целевых элементов. Это сокращает затраты на обслуживание пакетов инструментов перетаскивания, работающих в разных версиях.

Да. ИИ-помощники в программировании превращают простой сценарий, например, «перетащите BANK на дебетовую сторону и подтвердите общую сумму», в полную цепочку действий, включающую перетаскивание, создание, выполнение и этап проверки.

Подведем итог этой публикации следующим образом: