Return remote object description for unserializable objects
This patch starts handling unserializable objects by returning their description. Fixes #86.
This commit is contained in:
parent
72b7e50f9e
commit
6c1c3a0c45
@ -75,13 +75,21 @@ class Helper {
|
|||||||
}
|
}
|
||||||
if (!remoteObject.objectId)
|
if (!remoteObject.objectId)
|
||||||
return remoteObject.value;
|
return remoteObject.value;
|
||||||
let response = await client.send('Runtime.callFunctionOn', {
|
try {
|
||||||
objectId: remoteObject.objectId,
|
let response = await client.send('Runtime.callFunctionOn', {
|
||||||
functionDeclaration: 'function() { return this; }',
|
objectId: remoteObject.objectId,
|
||||||
returnByValue: true,
|
functionDeclaration: 'function() { return this; }',
|
||||||
});
|
returnByValue: true,
|
||||||
client.send('Runtime.releaseObject', {objectId: remoteObject.objectId});
|
});
|
||||||
return response.result.value;
|
return response.result.value;
|
||||||
|
} catch (e) {
|
||||||
|
// Return description for unserializable object, e.g. 'window'.
|
||||||
|
return remoteObject.description;
|
||||||
|
} finally {
|
||||||
|
client.send('Runtime.releaseObject', {objectId: remoteObject.objectId}).catch(e => {
|
||||||
|
// While we were serializing object, the page might've navigated.
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
11
test/test.js
11
test/test.js
@ -128,6 +128,10 @@ describe('Puppeteer', function() {
|
|||||||
let result = await page.evaluate(() => -Infinity);
|
let result = await page.evaluate(() => -Infinity);
|
||||||
expect(Object.is(result, -Infinity)).toBe(true);
|
expect(Object.is(result, -Infinity)).toBe(true);
|
||||||
}));
|
}));
|
||||||
|
it('should not fail for window object', SX(async function() {
|
||||||
|
let result = await page.evaluate(() => window);
|
||||||
|
expect(result).toBe('Window');
|
||||||
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Page.injectFile', function() {
|
describe('Page.injectFile', function() {
|
||||||
@ -256,6 +260,13 @@ describe('Puppeteer', function() {
|
|||||||
'calling console.error',
|
'calling console.error',
|
||||||
]);
|
]);
|
||||||
}));
|
}));
|
||||||
|
it('should not fail for window object', SX(async function() {
|
||||||
|
let windowObj = null;
|
||||||
|
page.once('console', arg => windowObj = arg);
|
||||||
|
page.evaluate(() => console.error(window));
|
||||||
|
await waitForEvents(page, 'console');
|
||||||
|
expect(windowObj).toBe('Window');
|
||||||
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Page.navigate', function() {
|
describe('Page.navigate', function() {
|
||||||
|
Loading…
Reference in New Issue
Block a user