Skip to content

Instantly share code, notes, and snippets.

@TonyHernandezAtMS
Forked from rahulpnath/Readme.md
Created August 25, 2020 17:49
Show Gist options
  • Save TonyHernandezAtMS/706b8ea977ee0aac3b7fb8317bc699cb to your computer and use it in GitHub Desktop.
Save TonyHernandezAtMS/706b8ea977ee0aac3b7fb8317bc699cb to your computer and use it in GitHub Desktop.
Cypress Azure AD Login
// In cypress/plugins folder
const puppeteer = require('puppeteer-core');
module.exports = {
debuggingPort: '',
setDebuggingPortMyService(port) {
[, debuggingPort] = port;
return null;
},
async aadLogin(options = {}) {
const username = options.username;
const password = options.password;
const appUrl = options.appUrl;
const emailSelector = "[name='loginfmt']";
const passwordSelector = '[name=passwd]';
const submitButtonSelector = 'input[type=submit]';
const browser = await puppeteer.connect({
browserURL: `http://localhost:${debuggingPort}`,
});
const page = await browser.newPage();
await page.goto(appUrl);
await page.waitForNavigation();
if (page.url().startsWith(appUrl)) {
// already logged in
page.close();
return {};
}
await page.waitForSelector(emailSelector);
await page.type(emailSelector, username);
await page.keyboard.press('Enter');
await page.waitForNavigation();
await page.waitForSelector(passwordSelector);
await page.focus(passwordSelector);
await page.waitFor(1000);
await page.type(passwordSelector, password);
await page.click(submitButtonSelector);
await page.waitForNavigation();
await page.waitForSelector(submitButtonSelector);
await page.click(submitButtonSelector);
await page.waitForNavigation();
await page.waitFor(2000);
await page.close();
return {};
},
};
// In cypress/plugins folder
const { setDebuggingPortMyService, aadLogin } = require('./aadLogin');
module.exports = (on, config) => {
// // `on` is used to hook into various events Cypress emits
// // `config` is the resolved Cypress config
on('before:browser:launch', (browser = {}, args) => {
const existing = args.args.find(arg => arg.slice(0, 23) === '--remote-debugging-port');
// Here you will need to persist the port to your plugins, whatever they may be
setDebuggingPortMyService(existing.split('='));
return args;
});
on('task', { aadLogin });
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment