Skip to main content

externalDrag

Instructs an actor who has the ability to BrowseTheWeb to drag a PageElement and drop it on another PageElement.

Example HTML with draggable element and drop zone

<p id="draggable" draggable="true">
This element is draggable.
</p>
<div id="droppable">
Drop Zone
</div>

<script>
const draggable = document.getElementById('draggable');
const droppable = document.getElementById('droppable');

draggable.addEventListener('dragstart', (event) => {
event.dataTransfer.setData('text/plain', event.target.id);
event.dataTransfer.effectAllowed = 'move';
});

droppable.addEventListener('dragover', (event) => {
event.preventDefault();
});

droppable.addEventListener('drop', (event) => {
event.preventDefault();
const id = event.dataTransfer.getData('text/plain');
event.target.appendChild(document.getElementById(id));
});
</script>

Page Elements for draggable and drop zone

import { By, PageElement } from '@serenity-js/web';

const draggable = () =>
PageElement.located(By.id('draggable')).describedAs('draggable element');

const dropZone = () =>
PageElement.located(By.id('droppable')).describedAs('drop zone');

Dragging and dropping the element

import { actorCalled } from '@serenity-js/core'
import { Ensure, isPresent } from '@serenity-js/assertions'
import { Drag, Navigate } from '@serenity-js/web'

await actorCalled('Doug')
.attemptsTo(
Navigate.to('/drag-and-drop-example.html'),
Drag.the(draggable()).to(dropZone()),
Ensure.that(draggable().of(dropZone()), isPresent()),
)

Learn more

Index

Methods

Methods

staticexternalthe

externalto

Page Options