WebDriverIO — это мощный инструмент для автоматизации браузерных тестов, который позволяет легко взаимодействовать с элементами на веб-странице. Одна из типичных задач, которая часто встречается при автоматизации тестов интерфейсов, — это тестирование функционала перетаскивания элементов (drag-and-drop). В этой статье рассмотрим, как настроить и протестировать drag-and-drop с использованием библиотеки jQuery UI и WebDriverIO.
Библиотека jQuery UI предоставляет удобный механизм
для создания интерактивных элементов на веб-страницах, включая
функционал для перетаскивания (drag-and-drop). С помощью методов
draggable() и droppable() можно легко
реализовать интерфейсы, в которых элементы можно перетаскивать и
размещать в других областях страницы.
Пример простого кода для реализации drag-and-drop с использованием jQuery UI:
$("#drag").draggable();
$("#drop").droppable({
drop: function(event, ui) {
$(this).addClass("ui-state-highlight").find("p").html("Dropped!");
}
});
Необходимо написать тест для проверки работоспособности drag-and-drop на странице, использующей jQuery UI для создания перетаскиваемых элементов.
npm init -y
npm install --save-dev webdriverio @wdio/cli @wdio/local-runner @wdio/mocha-framework @wdio/chromedriver-service
После установки настроите конфигурационный файл WebDriverIO с помощью команды:
npx wdio config
В WebDriverIO для имитации действий пользователя, таких как перетаскивание элементов, используются методы, которые могут быть использованы для перемещения элементов по координатам. Однако, когда требуется тестировать drag-and-drop с jQuery UI, необходимо имитировать действия с использованием конкретных методов.
Для выполнения drag-and-drop с использованием WebDriverIO можно
использовать метод dragAndDrop(), который доступен через
API WebDriverIO.
Пример теста для проверки drag-and-drop:
describe('Drag and Drop Test', () => {
it('should drag the element and drop it to the target', async () => {
// Открытие страницы с drag-and-drop функциональностью
await browser.url('https://example.com/drag-and-drop');
// Находим элементы для перетаскивания и цели
const draggable = await $('#drag');
const droppable = await $('#drop');
// Выполняем перетаскивание
await draggable.dragAndDrop(droppable);
// Проверка, что элемент был успешно перемещён
const text = await droppable.getText();
expect(text).toBe('Dropped!');
});
});
await browser.url('https://example.com/drag-and-drop');
— открывает веб-страницу, содержащую drag-and-drop
функциональность.const draggable = await $('#drag'); — находит элемент,
который будет перетаскиваться.const droppable = await $('#drop'); — находит целевой
элемент, в который нужно перетащить первый элемент.await draggable.dragAndDrop(droppable); — выполняет
операцию перетаскивания с помощью WebDriverIO.const text = await droppable.getText(); — проверяет,
что текст целевого элемента изменился после успешного
перетаскивания.await draggable.dragAndDrop({x: 100, y: 150});
В этом случае элемент будет перемещён на страницу с координатами
x: 100, y: 150.
const droppableStyle = await droppable.getCSSProperty('background-color');
expect(droppableStyle.value).toBe('rgb(0, 255, 0)'); // Ожидается зелёный цвет
@wdio/sauce-service или
@wdio/browserstack-service, для кроссбраузерного
тестирования.waitForExist(), waitForDisplayed() или
waitUntil() позволяет гарантировать, что элементы видны или
доступны для взаимодействия.await droppable.waitForDisplayed();
Разделение тестов: Если на странице несколько элементов с drag-and-drop, можно разбить тесты на несколько частей, чтобы проверять каждый элемент по отдельности. Это улучшает читаемость тестов и позволяет локализовать возможные ошибки.
Использование сторонних библиотек для улучшения
синхронизации: Если WebDriverIO по какой-то причине не может
корректно выполнить перетаскивание, можно воспользоваться такими
библиотеками, как actions или mouseActions,
для более сложных сценариев.
Тестирование функционала drag-and-drop с использованием WebDriverIO и jQuery UI — это важная и часто необходимая часть автоматизации интерфейсов. С помощью инструментов WebDriverIO можно легко имитировать взаимодействие с элементами, включая перетаскивание, и проверять правильность работы таких элементов. Разработка тестов для этого функционала требует внимательности, но предоставляет множество возможностей для реализации эффективной автоматизации.