Throw error on failed querySelector

This commit is contained in:
Joel Einbinder 2017-07-10 11:13:19 -07:00
parent 59a62e46f3
commit 1fc627d9eb
3 changed files with 15 additions and 2 deletions

View File

@ -109,6 +109,7 @@ class NetworkManager extends EventEmitter {
*/
_onResponseReceived(event) {
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));

View File

@ -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;
}
/**

View File

@ -543,6 +543,15 @@ describe('Puppeteer', function() {
await page.click('button');
expect(await page.evaluate(() => result)).toBe('Clicked');
}));
it('should fail to click a missing button', SX(async function() {
await page.navigate(STATIC_PREFIX + '/input/button.html');
try {
await page.click('button.does-not-exist');
fail('Clicking the button did not throw.')
} catch(error) {
expect(error.message).toBe('No node found for selector: button.does-not-exist');
}
}));
it('should type into the textarea', SX(async function() {
await page.navigate(STATIC_PREFIX + '/input/textarea.html');
await page.focus('textarea');