mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
Implement Page.uploadFile (#61)
This patch implements `Page.uploadFile` method to support file upload inputs.
This commit is contained in:
committed by
Andrey Lushnikov
parent
739c1566a9
commit
da0cde1b45
@@ -108,7 +108,10 @@ class NetworkManager extends EventEmitter {
|
||||
* @param {!Object} event
|
||||
*/
|
||||
_onResponseReceived(event) {
|
||||
let request = this._idToRequest.get(event.requestId) || null;
|
||||
let request = this._idToRequest.get(event.requestId);
|
||||
// FileUpload sends a response without a matching request.
|
||||
if (!request)
|
||||
return;
|
||||
let response = new Response(request, event.response, this._getResponseBody.bind(this, event.requestId));
|
||||
request._response = response;
|
||||
this.emit(NetworkManager.Events.Response, response);
|
||||
|
||||
19
lib/Page.js
19
lib/Page.js
@@ -493,10 +493,13 @@ class Page extends EventEmitter {
|
||||
* @param {!Promise<number>}
|
||||
*/
|
||||
async _querySelector(selector) {
|
||||
return (await this._client.send('DOM.querySelector', {
|
||||
let {nodeId} = await this._client.send('DOM.querySelector', {
|
||||
nodeId: await this._rootNodeId(),
|
||||
selector
|
||||
})).nodeId;
|
||||
});
|
||||
if (!nodeId)
|
||||
throw new Error('No node found for selector: ' + selector);
|
||||
return nodeId;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -569,6 +572,18 @@ class Page extends EventEmitter {
|
||||
waitFor(selector) {
|
||||
return this.mainFrame().waitFor(selector);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} selector
|
||||
* @param {!Array<string>} filePaths
|
||||
* @return {!Promise}
|
||||
*/
|
||||
async uploadFile(selector, ...filePaths) {
|
||||
await this._client.send('DOM.setFileInputFiles', {
|
||||
nodeId: await this._querySelector(selector),
|
||||
files: filePaths
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/** @enum {string} */
|
||||
|
||||
Reference in New Issue
Block a user