@luminati-io/webdriverio8
Version:
Next-gen browser and mobile automation test framework for Node.js
51 lines • 3.2 kB
JavaScript
import fs from 'node:fs';
import { getAbsoluteFilepath, assertDirectoryExists } from '../../utils/index.js';
/**
*
* Save a screenshot of the current browsing context to a PNG file on your OS. Be aware that
* some browser drivers take screenshots of the whole document (e.g. Geckodriver with Firefox)
* and others only of the current viewport (e.g. Chromedriver with Chrome).
*
* <example>
:saveScreenshot.js
it('should save a screenshot of the browser view', async () => {
await browser.saveScreenshot('./some/path/screenshot.png');
});
* </example>
*
* When running from a hook, make sure to explicitly define the hook as async:
* <example>
:wdio.conf.js
afterTest: async function(test) {
await browser.saveScreenshot('./some/path/screenshot.png');
}
* </example>
* @alias browser.saveScreenshot
* @param {String} filepath path to the generated image (`.png` suffix is required) relative to the execution directory
* @return {Buffer} screenshot buffer
* @type utility
*
*/
export async function saveScreenshot(filepath) {
/**
* type check
*/
if (typeof filepath !== 'string' || !filepath.endsWith('.png')) {
throw new Error('saveScreenshot expects a filepath of type string and ".png" file ending');
}
const absoluteFilepath = getAbsoluteFilepath(filepath);
await assertDirectoryExists(absoluteFilepath);
let screenBuffer;
if (this.isBidi) {
const context = await this.getWindowHandle();
const { data } = await this.browsingContextCaptureScreenshot({ context });
screenBuffer = data;
}
else {
screenBuffer = await this.takeScreenshot();
}
const screenshot = Buffer.from(screenBuffer, 'base64');
fs.writeFileSync(absoluteFilepath, screenshot);
return screenshot;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZVNjcmVlbnNob3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvYnJvd3Nlci9zYXZlU2NyZWVuc2hvdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDeEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFakY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGNBQWMsQ0FFaEMsUUFBZ0I7SUFFaEI7O09BRUc7SUFDSCxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUM3RCxNQUFNLElBQUksS0FBSyxDQUFDLHlFQUF5RSxDQUFDLENBQUE7SUFDOUYsQ0FBQztJQUVELE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDdEQsTUFBTSxxQkFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBRTdDLElBQUksWUFBb0IsQ0FBQTtJQUN4QixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNkLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFBO1FBQzVDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFDekUsWUFBWSxHQUFHLElBQUksQ0FBQTtJQUN2QixDQUFDO1NBQU0sQ0FBQztRQUNKLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtJQUM5QyxDQUFDO0lBQ0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDdEQsRUFBRSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUU5QyxPQUFPLFVBQVUsQ0FBQTtBQUNyQixDQUFDIn0=