UNPKG

@luminati-io/webdriverio8

Version:

Next-gen browser and mobile automation test framework for Node.js

59 lines (56 loc) 3.77 kB
import fs from 'node:fs'; import path from 'node:path'; import archiver from 'archiver'; /** * Uploads a file to the Selenium Standalone server or other browser driver * (e.g. Chromedriver) by using the [`file`](https://webdriver.io/docs/api/selenium#file) command. * _Note:_ that this command is only supported if you use a Selenium Hub or * Chromedriver directly. * * __Note:__ this command uses an un-offical protocol feature that is currently * only supported in Chrome and when running a [Selenium Grid](https://www.selenium.dev/documentation/en/grid/). * * <example> :uploadFile.js import path from 'node:path' it('should upload a file', async () => { await browser.url('https://the-internet.herokuapp.com/upload') const filePath = '/path/to/some/file.png' const remoteFilePath = await browser.uploadFile(filePath) await $('#file-upload').setValue(remoteFilePath) await $('#file-submit').click() }); * </example> * * @alias browser.uploadFile * @param {string} localPath local path to file * @type utility * @uses protocol/file * @return {String} remote URL */ export async function uploadFile(localPath) { /** * parameter check */ if (typeof localPath !== 'string') { throw new Error('number or type of arguments don\'t agree with uploadFile command'); } /** * check if command is available */ if (typeof this.file !== 'function') { throw new Error(`The uploadFile command is not available in ${this.capabilities.browserName}`); } const zipData = []; const source = fs.createReadStream(localPath); return new Promise((resolve, reject) => { archiver('zip') .on('error', (err) => reject(err)) .on('data', (data) => zipData.push(data)) .on('end', () => (this.file(Buffer.concat(zipData).toString('base64')) .then((localPath) => resolve(localPath), reject))) .append(source, { name: path.basename(localPath) }) .finalize(); }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkRmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9icm93c2VyL3VwbG9hZEZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3hCLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUM1QixPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUE7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxVQUFVLENBRTVCLFNBQWlCO0lBRWpCOztPQUVHO0lBQ0gsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLGtFQUFrRSxDQUFDLENBQUE7SUFDdkYsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBK0MsSUFBSSxDQUFDLFlBQXlDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQTtJQUNoSSxDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQWlCLEVBQUUsQ0FBQTtJQUNoQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUE7SUFFN0MsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNuQyxRQUFRLENBQUMsS0FBSyxDQUFDO2FBQ1YsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQVUsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3hDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFnQixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3BELEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FDYixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQy9DLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUN2RCxDQUFDO2FBQ0QsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7YUFDbEQsUUFBUSxFQUFFLENBQUE7SUFDbkIsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDIn0=