Skip to content

Instantly share code, notes, and snippets.

@nickytonline
Last active April 27, 2025 14:13
Show Gist options
  • Save nickytonline/bcdef8ef00211b0faf7c7c0e7777aaf6 to your computer and use it in GitHub Desktop.
Save nickytonline/bcdef8ef00211b0faf7c7c0e7777aaf6 to your computer and use it in GitHub Desktop.
Simulate a paste event in Cypress
/**
* Simulates a paste event.
*
* @param pasteOptions Set of options for a simulated paste event.
* @param pasteOptions.destinationSelector Selector representing the DOM element that the paste event should be dispatched to.
* @param pasteOptions.pastePayload Simulated data that is on the clipboard.
* @param pasteOptions.pasteFormat The format of the simulated paste payload. Default value is 'text'.
*/
function paste({ destinationSelector, pastePayload, pasteType = 'text' }) {
// https://developer.mozilla.org/en-US/docs/Web/API/Element/paste_event
cy.get(destinationSelector).then($destination => {
const pasteEvent = Object.assign(new Event('paste', { bubbles: true, cancelable: true }), {
clipboardData: {
getData: (type = pasteType) => pastePayload,
},
});
$destination[0].dispatchEvent(pasteEvent);
});
}
@techwizzdom
Copy link

I need to test a "global" paste event (i.e., wherever I paste, I need to do some actions). This code works well for it:

Cypress.Commands.add("simulatePaste", (text: string) => {
  cy.window().then((win) => {
    const pasteEvent = new ClipboardEvent("paste", {
      clipboardData: new DataTransfer(),
      bubbles: true,
      cancelable: true,
    })

    Object.defineProperty(pasteEvent.clipboardData, "getData", {
      value: () => text,
    })

    win.document.dispatchEvent(pasteEvent)
  })
})

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment