@luminati-io/webdriverio8
Version:
Next-gen browser and mobile automation test framework for Node.js
59 lines (56 loc) • 3.77 kB
JavaScript
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=