Skip to content

Commit

Permalink
fix: don't throw on bad access
Browse files Browse the repository at this point in the history
  • Loading branch information
jrandolf committed Jun 7, 2022
1 parent 328c3f5 commit ce142ed
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 30 deletions.
28 changes: 12 additions & 16 deletions src/common/JSHandle.ts
Expand Up @@ -801,9 +801,12 @@ export class ElementHandle<
/**
* This method expects `elementHandle` to point to an
* {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input | input element}.
*
* @param filePaths - Sets the value of the file input to these paths.
* If some of the `filePaths` are relative paths, then they are resolved
* relative to the {@link https://nodejs.org/api/process.html#process_process_cwd | current working directory}
* If a path is relative, then they it is resolved relative to the
* {@link https://nodejs.org/api/process.html#process_process_cwd | current working directory}.
* Note for locals script connecting to remote chrome environments,
* paths must be absolute.
*/
async uploadFile(...filePaths: string[]): Promise<void> {
const isMultiple = await this.evaluate<(element: Element) => boolean>(
Expand All @@ -829,21 +832,14 @@ export class ElementHandle<
avoid paying the cost unnecessarily.
*/
const path = await import('path');
const fs = await import('fs');
// 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 fs.promises.access(resolvedPath, fs.constants.R_OK);
} catch (error) {
if (error && (error as NodeJS.ErrnoException).code === 'ENOENT')
throw new Error(`${filePath} does not exist or is not readable`);
}

return resolvedPath;
})
);
const files = filePaths.map((filePath) => {
if (path.isAbsolute(filePath)) {
return filePath;
} else {
return path.resolve(filePath);
}
});
const { objectId } = this._remoteObject;
const { node } = await this._client.send('DOM.describeNode', { objectId });
const { backendNodeId } = node;
Expand Down
14 changes: 0 additions & 14 deletions test/input.spec.ts
Expand Up @@ -235,20 +235,6 @@ describe('input tests', function () {
.catch((error_) => (error = error_));
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((error_) => (error = error_));
expect(error).not.toBe(null);
});
it('should fail when accepting file chooser twice', async () => {
const { page } = getTestState();

Expand Down

0 comments on commit ce142ed

Please sign in to comment.