Функция перетаскивания – это обычное требование в современных веб-приложениях, позволяющее пользователям взаимодействовать с элементами, перемещая их по экрану. Cypress, мощная среда комплексного тестирования, обеспечивает надежную поддержку тестирования взаимодействия перетаскивания. В этой статье мы рассмотрим различные методы реализации перетаскивания в Cypress, а также приведем примеры кода.
- Метод 1: использование команды перетаскивания Cypress
Cypress предоставляет встроенную командуdrag, которая позволяет имитировать действия перетаскивания. Вот пример:
cy.get('.draggable-item')
.trigger('mousedown', { which: 1 })
.trigger('mousemove', { clientX: 500, clientY: 200 })
.trigger('mouseup', { force: true });
- Метод 2: использование событий перетаскивания HTML5.
Другой подход заключается в непосредственном использовании событий перетаскивания HTML5. Вот пример:
cy.get('.draggable-item')
.trigger('dragstart')
.trigger('dragover')
.trigger('drop')
.trigger('dragend');
- Метод 3: использование внешних библиотек
Cypress позволяет использовать внешние библиотеки JavaScript для более сложных сценариев перетаскивания. Одна из популярных библиотек —react-beautiful-dnd. Вот пример:
cy.get('.draggable-item')
.then(draggableElement => {
cy.wrap(draggableElement)
.trigger('mousedown', { which: 1 })
.trigger('mousemove', { clientX: 500, clientY: 200 });
// Use the library-specific API to drop the element
// For example, with react-beautiful-dnd:
cy.get('.droppable-container')
.then(droppableContainer => {
// Find the target droppable container
const targetContainer = droppableContainer[0].getElementsByClassName('target-container')[0];
cy.wrap(targetContainer).trigger('mousemove').trigger('mouseup');
});
});
- Метод 4: пользовательские реализации перетаскивания
В некоторых случаях вам может потребоваться реализовать собственное поведение перетаскивания. Этого можно достичь, объединив собственные события Cypress с функциями JavaScript. Вот пример:
cy.get('.draggable-item')
.then(draggableElement => {
// Get the target coordinates
const targetX = 500;
const targetY = 200;
// Calculate the offsets
const offsetX = draggableElement[0].getBoundingClientRect().left;
const offsetY = draggableElement[0].getBoundingClientRect().top;
cy.wrap(draggableElement)
.trigger('mousedown', { which: 1 })
.trigger('mousemove', { clientX: offsetX + targetX, clientY: offsetY + targetY })
.trigger('mouseup');
});
Освоение функции перетаскивания необходимо для тестирования и разработки интерактивных веб-приложений. В этой статье мы рассмотрели несколько методов реализации перетаскивания в Cypress, включая встроенные команды Cypress, события перетаскивания HTML5, использование внешних библиотек, таких как react-beautiful-dnd, и создание пользовательских реализаций перетаскивания.. Используя эти методы, вы можете тщательно протестировать и обеспечить бесперебойную работу перетаскивания в ваших наборах тестов Cypress.