From 603b9f54dda62f306f13e2d1261553c1c30c4ec1 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Thu, 30 Jan 2020 11:04:09 -0800 Subject: [PATCH] fix: make contentFrame cross-frame handles test pass (#761) --- src/dom.ts | 2 +- test/evaluation.spec.js | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/dom.ts b/src/dom.ts index 875a032240..1efbe3e855 100644 --- a/src/dom.ts +++ b/src/dom.ts @@ -154,7 +154,7 @@ export class ElementHandle extends js.JSHandle { } async contentFrame(): Promise { - const isFrameElement = await this._evaluateInUtility(node => node && (node instanceof HTMLIFrameElement || node instanceof HTMLFrameElement)); + const isFrameElement = await this._evaluateInUtility(node => node && (node.nodeName === 'IFRAME' || node.nodeName === 'FRAME')); if (!isFrameElement) return null; return this._page._delegate.getContentFrame(this); diff --git a/test/evaluation.spec.js b/test/evaluation.spec.js index f092e33926..097f34f9e8 100644 --- a/test/evaluation.spec.js +++ b/test/evaluation.spec.js @@ -381,5 +381,14 @@ module.exports.describe = function({testRunner, expect, FFOX, CHROMIUM, WEBKIT}) const error = await page.evaluate(body => body.innerHTML, bodyHandle).catch(e => e); expect(error.message).toContain('Unable to adopt element handle from a different document'); }); + it.skip(FFOX)('should return non-empty Node.constructor.name in utility context', async({page,server}) => { + await page.goto(server.EMPTY_PAGE); + await utils.attachFrame(page, 'frame1', server.EMPTY_PAGE); + const frame = page.frames()[1]; + const context = await frame._utilityContext(); + const elementHandle = await context.evaluateHandle(() => window.top.document.querySelector('#frame1')); + const constructorName = await context.evaluate(node => node.constructor.name, elementHandle); + expect(constructorName).toBe('HTMLIFrameElement'); + }); }); };