fix: make uploadFile throw for non-existent files (#5733)

This commit is contained in:
Paul Lewis 2020-04-24 12:36:46 +01:00 committed by GitHub
parent 1a4e260458
commit 79e82e5b65
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 1 deletions

View File

@ -291,7 +291,24 @@ export class ElementHandle extends JSHandle {
// the cost unnecessarily.
// eslint-disable-next-line @typescript-eslint/no-var-requires
const path = require('path');
const files = filePaths.map(filePath => path.resolve(filePath));
// eslint-disable-next-line @typescript-eslint/no-var-requires
const fs = require('fs');
// eslint-disable-next-line @typescript-eslint/no-var-requires
const {promisify} = require('util');
const access = promisify(fs.access);
// Locate all files and confirm that they exist.
const files = await Promise.all(filePaths.map(async filePath => {
const resolvedPath: string = path.resolve(filePath);
try {
await access(resolvedPath, fs.constants.R_OK);
} catch (error) {
if (error.code === 'ENOENT')
throw new Error(`${filePath} does not exist or is not readable`);
}
return resolvedPath;
}));
const {objectId} = this._remoteObject;
const {node} = await this._client.send('DOM.describeNode', {objectId});
const {backendNodeId} = node;

View File

@ -184,6 +184,18 @@ describe('input tests', function() {
]).catch(e => error = e);
expect(error).not.toBe(null);
});
it('should fail for non-existent files', async() => {
const {page} = getTestState();
await page.setContent(`<input type=file>`);
const [chooser] = await Promise.all([
page.waitForFileChooser(),
page.click('input'),
]);
let error = null;
await chooser.accept(['file-does-not-exist.txt']).catch(e => error = e);
expect(error).not.toBe(null);
});
it('should fail when accepting file chooser twice', async() => {
const {page} = getTestState();