如何在Microsoft Edge中通过SSO运行Cucumber/Playwright测试
解决Cucumber+Playwright中Edge的SSO登录复用问题
问题根源
当前代码用browser.newContext()创建的是无痕模式上下文,完全隔离本地Edge的用户会话(包括已登录的SSO状态),因此无法复用本地已登录的SSO完成测试。launchPersistentContext正是解决该问题的API——它会加载本地Edge的用户配置文件,直接复用已有的登录会话。
修改方案
替换Before钩子中的代码,用launchPersistentContext替代chromium.launch() + browser.newContext()的组合,具体操作如下:
1. 获取本地Edge的用户数据目录
打开Edge浏览器,在地址栏输入edge://version/,找到个人资料路径,复制路径的前半部分(比如Windows系统下一般是C:\Users\你的用户名\AppData\Local\Microsoft\Edge\User Data,不要包含末尾的\Default)。
2. 修改核心代码
const { Given, When, Then, Before, After, setDefaultTimeout } = require("@cucumber/cucumber"); const { chromium, expect } = require("@playwright/test"); const { Page } = require("playwright"); setDefaultTimeout(10 * 1000); let page, browser; Before(async function () { // 替换为你从edge://version/获取的用户数据目录 const userDataDir = 'C:\\Users\\你的用户名\\AppData\\Local\\Microsoft\\Edge\\User Data'; // 创建持久化上下文,复用本地Edge的登录会话 const context = await chromium.launchPersistentContext(userDataDir, { channel: 'msedge', headless: false, // 指定使用默认配置文件(如果有多个配置文件,可改为Profile 1等对应名称) profile: 'Default', // 可选:避免弹出设置默认浏览器的提示 args: ['--no-default-browser-check'] }); page = await context.newPage(); // 保留浏览器引用用于后续关闭 browser = context.browser(); }); Given("User navigates to the Staging Environment Login", async () => { await page.goto("<website>"); // 替换硬编码等待为更可靠的导航完成等待 await page.waitForNavigation({ waitUntil: 'networkidle' }); await expect(page).toHaveTitle('Sign in to Website'); const pageTitle = await page.title(); console.log("Page title is: " + pageTitle); }); When("using the SSO log in", async function(){ await page.waitForLoadState('networkidle'); // 等待SSO链接加载完成再点击 await page.getByTitle('saml').waitFor(); await page.getByTitle('saml').click(); await page.waitForNavigation({ waitUntil: 'networkidle' }); }); After(async function () { await page.close(); await browser.close(); });
关键注意点
- 使用
launchPersistentContext时,不要同时打开本地Edge浏览器,避免资源冲突导致启动失败。 - 替换代码中的
<website>为实际测试地址,你的用户名替换为你的系统用户名。 - 建议移除
waitForTimeout这类硬编码等待,改用waitForNavigation、waitForSelector等基于事件的等待,提升测试稳定性。
内容的提问来源于stack exchange,提问作者Tufty
相关产品推荐
相关产品推荐

