我正在从头开始设置 Playwright 框架,并尝试在 Playwright 的帮助下重用身份验证
storageState
,当我的测试尝试身份验证失败时,我遇到了问题。
我使用
test.use()
设置了存储状态传递,并使用 playwright.config.ts
键在 starageState
文件中全局设置了存储状态传递。
这里可能出了什么问题?我是不是错过了什么重要的事情?
我的身份验证规范如下所示:
const loginPage = new LoginPage(page);
await loginPage.goto();
await loginPage.login({
email: ENV.EMAIL,
password: ENV.PASSWORD
});
await expect(page).toHaveURL('/home')
await page.waitForLoadState('domcontentloaded');
console.log(await page.context().storageState());
await page.context().storageState({ path: STORAGE_STATE });
测试基本上只不过是导航到“/home”并验证 URL。
我在想也许我遗漏了一些关于饼干的东西。 重要提示:我们使用 Firebase 令牌进行授权,也许这个存储阶段不足以登录?
Firebase 不使用 cookie 来管理身份验证状态,它使用浏览器的 IndexedDB。 Playwright 目前仅在保存和恢复浏览器“状态”时存储 cookie。 因此,Playwright 建议的使用
storageState
缓存登录的方法不适用于 Firebase。
Playwright 存在一个未解决的问题(截至 2025 年 1 月)(请参阅 https://github.com/microsoft/playwright/issues/11164)。 解决方法(在该问题中)建议使用浏览器的 IndexedDB API 以及一些有关 Firebase 的已发布详细信息来手动保存/恢复 IndexedDB 状态。