typescript - Playwright fejler i at autentificere til Firebase ved brug af storage state


Jeg er ved at sætte Playwright-rammeværket op fra bunden og forsøger at genbruge autentificering med hjælp fra Playwright storageState, og jeg stødte på et problem, da mine tests fejlede, mens de forsøgte at autentificere.

  1. Der er en opsætningsfil med login, hentning og bevarelse af lagerstatus.

  1. Der er en konfigurationsfil med test, der prøver at navigere til f.eks. '/home'-siden, men i stedet sidder den fast på '/login', åbenbart uden at have autentificeret.

Jeg satte op lagringstilstandspassing med test.use() og globalt i playwright.config.ts filen med starageState-nøglen. Hvad kunne være galt her? Mangler jeg noget vigtigt?

Min auth-spec ser sådan ud:

    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 });

Og testen er grundlæggende ikke andet end navigation til '/home' og validering af URL'en.

Jeg tænkte, at måske går jeg glip af noget med hensyn til cookies. Vigtig bemærkning: Vi bruger Firebase-token til autorisation, måske er dette lagringsstadium bare ikke nok til at logge ind?

Svar #1

Firebase bruger ikke cookies til at håndtere autentificeringstilstand; det bruger browserens IndexedDB. Playwright gemmer i øjeblikket kun cookies, når browserens "state" gemmes og gendannes. Så Playwrights foreslåede metode med at bruge storageState til at cache logins vil ikke fungere med Firebase.

Der er et åbent problem (fra jan 2025) med Playwright (se https://github.com/microsoft/playwright/issues/11164). Arbejdsløsninger (i den pågældende sag) foreslår at bruge browserens IndexedDB-API'er plus nogle offentliggjorte oplysninger om Firebase til manuelt at gemme/gendanne IndexedDB-tilstanden.