@luminati-io/webdriverio8
Version:
Next-gen browser and mobile automation test framework for Node.js
46 lines • 3.58 kB
JavaScript
import fs from 'node:fs';
import { getAbsoluteFilepath, assertDirectoryExists } from '../../utils/index.js';
/**
*
* Prints the page of the current browsing context to a PDF file on your OS.
*
* <example>
:savePDF.js
it('should save a PDF screenshot of the browser view', function () {
await browser.savePDF('./some/path/screenshot.pdf');
});
* </example>
*
* @alias browser.savePDF
* @param {String} filepath path to the generated pdf (`.pdf` suffix is required) relative to the execution directory
* @param {PDFPrintOptions=} options Print PDF Options
* @param {String=} options.orientation Orientation of PDF page
* @param {number=} options.scale Scale of PDF page
* @param {boolean=} options.background Include background of PDF page
* @param {number=} options.width Width of PDF page
* @param {number=} options.height Height of PDF page
* @param {number=} options.top Top padding of PDF page
* @param {number=} options.bottom Bottom padding of PDF page
* @param {number=} options.left Left padding of PDF page
* @param {number=} options.right Right padding of PDF page
* @param {boolean=} options.shrinkToFit Shrink page to fit page
* @param {object[]} options.pageRanges Range of pages to include in PDF
* @return {Buffer} screenshot buffer
* @type utility
*
*/
export async function savePDF(filepath, options) {
/**
* type check
*/
if (typeof filepath !== 'string' || !filepath.endsWith('.pdf')) {
throw new Error('savePDF expects a filepath of type string and ".pdf" file ending');
}
const absoluteFilepath = getAbsoluteFilepath(filepath);
await assertDirectoryExists(absoluteFilepath);
const pdf = await this.printPage(options?.orientation, options?.scale, options?.background, options?.width, options?.height, options?.top, options?.bottom, options?.left, options?.right, options?.shrinkToFit, options?.pageRanges);
const page = Buffer.from(pdf, 'base64');
fs.writeFileSync(absoluteFilepath, page);
return page;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZVBERi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9icm93c2VyL3NhdmVQREYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3hCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBZ0JqRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsT0FBTyxDQUV6QixRQUFnQixFQUNoQixPQUF5QjtJQUV6Qjs7T0FFRztJQUNILElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzdELE1BQU0sSUFBSSxLQUFLLENBQUMsa0VBQWtFLENBQUMsQ0FBQTtJQUN2RixDQUFDO0lBRUQsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUN0RCxNQUFNLHFCQUFxQixDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFFN0MsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUN0RixPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFDN0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFDOUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDdkMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUV4QyxPQUFPLElBQUksQ0FBQTtBQUNmLENBQUMifQ==