You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 00:17:09