Created
March 3, 2022 19:00
-
-
Save itayadler/db1f7fb104d1fc81c07d45ee81c282e2 to your computer and use it in GitHub Desktop.
cypress-puppeteer-core-plugin-example.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const puppeteer = require("puppeteer-core"); | |
let cdpPort = null; | |
let browser = null; | |
function browserLaunchHandler(browser = {}, options) { | |
let remoteDebuggingPortArg = options.filter((arg) => | |
arg.includes("--remote-debugging-port") | |
); | |
//note(itay): When we run using `cypress open-ct`, we will use a chromium browser | |
//so the args will include the cdpPort in remote-debugging-port, so I extract it from | |
//there | |
if (remoteDebuggingPortArg.length == 1) { | |
console.log("Found remote debugging port", remoteDebuggingPortArg); | |
cdpPort = parseInt(remoteDebuggingPortArg[0].split("=")[1], 10); | |
} else { | |
console.error("Couldn't find remote debugging port"); | |
} | |
console.log("Detected CDP port", cdpPort); | |
setTimeout(tryCdpConnection, 500); | |
return options; | |
} | |
async function tryCdpConnection() { | |
try { | |
browser = await connectPuppeteer(); | |
console.info(`Connection Ok to port ${cdpPort}`); | |
} catch (error) { | |
console.info("CDP debugger port not available yet. Reconnecting..."); | |
setTimeout(tryCdpConnection, 500); | |
} | |
} | |
async function connectPuppeteer() { | |
const browserURL = "http://127.0.0.1:" + cdpPort; | |
return puppeteer.connect({ | |
browserURL, | |
defaultViewport: null, | |
ignoreHTTPSErrors: true, | |
}); | |
} | |
module.exports = (on, _config) => { | |
on("before:browser:launch", browserLaunchHandler); | |
on("task", { | |
async openTab({ url }) { | |
//note(itay): At this point you have a browser to drive using puppeteer-core / playwright-core | |
//await openTab(browser, { url }); | |
return true; | |
}, | |
}); | |
}; | |
//under commands.js | |
Cypress.Commands.add("openTab", (url) => { | |
cy.task("openTab", { url }); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment