Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save itayadler/db1f7fb104d1fc81c07d45ee81c282e2 to your computer and use it in GitHub Desktop.
Save itayadler/db1f7fb104d1fc81c07d45ee81c282e2 to your computer and use it in GitHub Desktop.
cypress-puppeteer-core-plugin-example.js
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