简体   繁体   中英

How do you copy response values to the clipboard in Postman javascript tests?

I've recently found out about the ability in postman to write pre-request and test scripts using javascript.

I'm trying to figure out if it's possible to copy a value to the clipboard during a test in conjunction with setting the postman environment variable.

For example:

var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable ("Action ID", jsonData.ActionId);
// set jsonData.ActionId to clipboard

There is a way that it could be achieved, by using the visualizer and bringing in the clipboard.js CDN.

This is very basic but by adding this script to the Tests tab, you can see the variable value in the Visualize tab, in the response section.

pm.environment.set("Action_ID", pm.response.json().ActionId);

let template = `
<html>
<head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.4.1/dist/jquery.min.js"></script>
</head>
<body>
    <div>
    <div>
        <pre><code style="width:max-content!important;" id="copyText">${pm.environment.get('Action_ID')}</code></pre>
    </div>
    <button class="copyButton" type="button" data-clipboard-action="copy" data-clipboard-target="#copyText" style="background:green;color:white;">Copy to Clipboard</button>
    </div>
</body>
</html>
<script>
    var clipboard = new ClipboardJS('.copyButton');

    clipboard.on('success', function(e) {
        e.clearSelection();
        e.trigger.textContent = '✔ Copied!';
        window.setTimeout(function() {
            e.trigger.textContent = 'Copy to Clipboard';
        }, 2000);
    });
    clipboard.on('error', function(e) {
        e.clearSelection();
        e.trigger.textContent = '✗ Not Copied';
        window.setTimeout(function() {
            e.trigger.textContent = 'Copy to Clipboard';
        }, 2000);
    });

</script>`

pm.visualizer.set(template, pm.response.json())

在此处输入图像描述

@Danny Dainton That's super clever solution. Thank you!

Here's a simplier version with auto-copy. No need to click on the button manually.

const response = pm.response.json();

let template = `<html><body>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.11/clipboard.min.js"></script>
    <code style="width:max-content!important;padding:10px;display:block;" id="copyText">${response.token}</code>
    <button id="copyButton" type="button" data-clipboard-action="copy" data-clipboard-target="#copyText" style="background:green;color:white;">Copy to Clipboard</button>
    <script>
        new ClipboardJS('#copyButton')
            .on('success', function(e) {
                e.clearSelection();
            })
            .on('error', function(e) {
                e.clearSelection();
                copyText.style.borderColor = 'red';
            });
        copyButton.click();
    </script>
</body></html>`;

pm.visualizer.set(template);

// using navigator.clipboard.writeText()

enter image description here

Here is a sample without using any CDN or library.

let template =
`    
    <script>
        pm.getData(function (error, data)
        {
            let textBox = document.createElement('textarea');
            textBox.value = data.key;
            document.body.appendChild(textBox);
            textBox.focus();
            textBox.select();
            document.execCommand('copy');
            document.body.removeChild(textBox);
        });
    </script>
`;

pm.visualizer.set(template, 
    pm.response.json()
);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM