Skip to content

Instantly share code, notes, and snippets.

@nickytonline
Last active August 27, 2024 11:11
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);
});
}
@AndrejDujakoski
Copy link

AndrejDujakoski commented Aug 27, 2024

Cypress version: 13.13.2

What worked for me is more of a workaround but still uses the copied clipboard from cypress itself.
Get the copied value from the cypress window, alias it and then type it or perform some assertions on it.

    cy.window().then((win) => {
        return cy.wrap(win.navigator.clipboard.readText()).then((clipboardText) => {
            const expectedText = 'Your expected text, if known previously for assertion';
            expect(clipboardText).to.equal(expectedText);
            // Save the clipboard to "paste" it later
            cy.wrap(clipboardText).as('copiedText');
        });
    });
    cy.get('@copiedText').then((copiedText) => {
        // Use copiedText as needed, use .type() to simulate "paste" if you work with strings
        cy.log(copiedText);
    });

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