Ответ
Drag and Drop (DnD) — это механизм пользовательского интерфейса, позволяющий "захватить" элемент (мышью или касанием), переместить его и "отпустить" в целевой области.
Почему это сложно для тестирования? Требуется проверка корректности передачи данных, состояния интерфейса и поведения в разных браузерах.
Пример базовой реализации на JavaScript с использованием HTML5 API:
<!DOCTYPE html>
<div id="dragItem" draggable="true">Перетащи меня</div>
<div id="dropZone">Зона для сброса</div>
<script>
const dragItem = document.getElementById('dragItem');
const dropZone = document.getElementById('dropZone');
// 1. Событие начала перетаскивания
dragItem.addEventListener('dragstart', (event) => {
event.dataTransfer.setData('text/plain', event.target.id);
event.target.style.opacity = '0.5';
});
// 2. Событие над зоной сброса (ОБЯЗАТЕЛЬНО отменить по умолчанию)
dropZone.addEventListener('dragover', (event) => {
event.preventDefault(); // Позволяет сбросить элемент
dropZone.style.backgroundColor = 'lightblue';
});
// 3. Событие сброса элемента
dropZone.addEventListener('drop', (event) => {
event.preventDefault();
const data = event.dataTransfer.getData('text/plain');
const draggedElement = document.getElementById(data);
dropZone.appendChild(draggedElement);
draggedElement.style.opacity = '1';
dropZone.style.backgroundColor = '';
});
</script>
Ключевые аспекты для тестирования:
- Функциональность: Элемент можно взять, переместить и корректно сбросить.
- Целостность данных: Данные элемента не теряются после переноса.
- Обратная связь UI: Визуальные подсказки при перетаскивании (курсор, подсветка).
- Граничные случаи: Сброс в недопустимую зону, отмена операции.
- Кроссбраузерность: Работа в современных и legacy-браузерах.