diff --git a/src/chromium/crPage.ts b/src/chromium/crPage.ts index 9f21463e6c..4d7315e670 100644 --- a/src/chromium/crPage.ts +++ b/src/chromium/crPage.ts @@ -255,11 +255,6 @@ export class CRPage implements PageDelegate { return this._sessionForHandle(handle)._getContentQuads(handle); } - async layoutViewport(): Promise<{ width: number, height: number }> { - const layoutMetrics = await this._mainFrameSession._client.send('Page.getLayoutMetrics'); - return { width: layoutMetrics.layoutViewport.clientWidth, height: layoutMetrics.layoutViewport.clientHeight }; - } - async setInputFiles(handle: dom.ElementHandle, files: types.FilePayload[]): Promise { await handle._evaluateInUtility(([injected, node, files]) => injected.setInputFiles(node, files), dom.toFileTransferPayload(files)); diff --git a/src/dom.ts b/src/dom.ts index 3516ff25b7..8c6aceb621 100644 --- a/src/dom.ts +++ b/src/dom.ts @@ -241,7 +241,7 @@ export class ElementHandle extends js.JSHandle { const [quads, metrics] = await Promise.all([ this._page._delegate.getContentQuads(this), - this._page._delegate.layoutViewport(), + this._page.mainFrame()._utilityContext().then(utility => utility.evaluateInternal(() => ({width: innerWidth, height: innerHeight}))), ] as const); if (!quads || !quads.length) return 'notvisible'; diff --git a/src/firefox/ffPage.ts b/src/firefox/ffPage.ts index 92923a7920..ac517568fb 100644 --- a/src/firefox/ffPage.ts +++ b/src/firefox/ffPage.ts @@ -438,10 +438,6 @@ export class FFPage implements PageDelegate { return result.quads.map(quad => [ quad.p1, quad.p2, quad.p3, quad.p4 ]); } - async layoutViewport(): Promise<{ width: number, height: number }> { - return this._page.evaluate(() => ({ width: innerWidth, height: innerHeight })); - } - async setInputFiles(handle: dom.ElementHandle, files: types.FilePayload[]): Promise { await handle._evaluateInUtility(([injected, node, files]) => injected.setInputFiles(node, files), dom.toFileTransferPayload(files)); diff --git a/src/page.ts b/src/page.ts index 2cdf448cee..f416248d7e 100644 --- a/src/page.ts +++ b/src/page.ts @@ -64,7 +64,6 @@ export interface PageDelegate { getContentFrame(handle: dom.ElementHandle): Promise; // Only called for frame owner elements. getOwnerFrame(handle: dom.ElementHandle): Promise; // Returns frameId. getContentQuads(handle: dom.ElementHandle): Promise; - layoutViewport(): Promise<{ width: number, height: number }>; setInputFiles(handle: dom.ElementHandle, files: types.FilePayload[]): Promise; getBoundingBox(handle: dom.ElementHandle): Promise; getFrameElement(frame: frames.Frame): Promise; diff --git a/src/webkit/wkPage.ts b/src/webkit/wkPage.ts index e5331107cd..820064f0d1 100644 --- a/src/webkit/wkPage.ts +++ b/src/webkit/wkPage.ts @@ -781,10 +781,6 @@ export class WKPage implements PageDelegate { ]); } - async layoutViewport(): Promise<{ width: number, height: number }> { - return this._page.evaluate(() => ({ width: innerWidth, height: innerHeight })); - } - async setInputFiles(handle: dom.ElementHandle, files: types.FilePayload[]): Promise { const objectId = handle._objectId; await this._session.send('DOM.setInputFiles', { objectId, files: dom.toFileTransferPayload(files) }); diff --git a/test/click.spec.js b/test/click.spec.js index 7ec0e52a41..5df0d365e7 100644 --- a/test/click.spec.js +++ b/test/click.spec.js @@ -768,6 +768,12 @@ describe('Page.click', function() { expect(await page.evaluate(() => window.button1)).toBe(true); expect(await page.evaluate(() => window.button2)).toBe(undefined); }); + it('should click the button when window.innerWidth is corrupted', async({page, server}) => { + await page.goto(server.PREFIX + '/input/button.html'); + await page.evaluate(() => window.innerWidth = 0); + await page.click('button'); + expect(await page.evaluate(() => result)).toBe('Clicked'); + }); }); describe('Page.check', function() {