diff --git a/docs/helpers/Playwright.md b/docs/helpers/Playwright.md index e7e58abae..0ca909cb0 100644 --- a/docs/helpers/Playwright.md +++ b/docs/helpers/Playwright.md @@ -131,7 +131,8 @@ Traces will be saved to `output/trace` Playwright: { url: "http://localhost", chromium: { - browserWSEndpoint: 'ws://localhost:9222/devtools/browser/c5aa6160-b5bc-4d53-bb49-6ecb36cd2e0a' + browserWSEndpoint: 'ws://localhost:9222/devtools/browser/c5aa6160-b5bc-4d53-bb49-6ecb36cd2e0a', + cdpConnection: false // default is false } } } diff --git a/lib/helper/Playwright.js b/lib/helper/Playwright.js index 5ec97818c..8932af6fe 100644 --- a/lib/helper/Playwright.js +++ b/lib/helper/Playwright.js @@ -167,7 +167,8 @@ const { createValueEngine, createDisabledEngine } = require('./extras/Playwright * Playwright: { * url: "http://localhost", * chromium: { - * browserWSEndpoint: 'ws://localhost:9222/devtools/browser/c5aa6160-b5bc-4d53-bb49-6ecb36cd2e0a' + * browserWSEndpoint: 'ws://localhost:9222/devtools/browser/c5aa6160-b5bc-4d53-bb49-6ecb36cd2e0a', + * cdpConnection: false // default is false * } * } * } @@ -272,6 +273,7 @@ class Playwright extends Helper { this.sessionPages = {}; this.activeSessionName = ''; this.isElectron = false; + this.isCDPConnection = false; this.electronSessions = []; this.storageState = null; @@ -347,6 +349,7 @@ class Playwright extends Helper { this.isRemoteBrowser = !!this.playwrightOptions.browserWSEndpoint; this.isElectron = this.options.browser === 'electron'; this.userDataDir = this.playwrightOptions.userDataDir; + this.isCDPConnection = this.playwrightOptions.cdpConnection; popupStore.defaultAction = this.options.defaultPopupAction; } @@ -692,6 +695,15 @@ class Playwright extends Helper { async _startBrowser() { if (this.isElectron) { this.browser = await playwright._electron.launch(this.playwrightOptions); + } else if (this.isRemoteBrowser && this.isCDPConnection) { + try { + this.browser = await playwright[this.options.browser].connectOverCDP(this.playwrightOptions); + } catch (err) { + if (err.toString().indexOf('ECONNREFUSED')) { + throw new RemoteBrowserConnectionRefused(err); + } + throw err; + } } else if (this.isRemoteBrowser) { try { this.browser = await playwright[this.options.browser].connect(this.playwrightOptions);