typescript - Playwright nem tud hitelesíteni a Firebase-hez a tárolási állapot használatával
A Playwright keretrendszert nulláról állítom be, és megpróbálom újrahasználni az autentikációt a Playwright storageState segítségével, és problémába ütköztem, amikor a tesztek az autentikáció próbálkozásakor megbuknak.
- Van egy telepítőfájl bejelentkezéssel, az állapot lekérésével és megőrzésével a tárolásban.
Van egy konfigurációs fájl teszttel, megpróbálva navigálni például a '/home' oldalra, de ehelyett a '/login' oldalon ragadt, nyilvánvalóan nem hitelesítve.
Beállítottam a tárolási állapot átadását a test.use() segítségével, és globálisan a playwright.config.ts fájlban a storageState kulccsal. Mi lehet a probléma? Hiányzik valami fontos?
Az autentikációs specifikációm így néz ki:
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 });
És a teszt alapvetően nem más, mint a navigálás a '/home' oldalra és az URL ellenőrzése.
Azt gondoltam, talán valamit kihagyok a sütik kapcsán. Fontos megjegyzés: Az engedélyezéshez Firebase token-t használunk, lehet, hogy ez a tárolási lépés egyszerűen nem elég a bejelentkezéshez?
Válasz #1
A Firebase nem sütiket használ az autentikációs állapot kezelésére, hanem a böngésző IndexedDB-jét használja. A Playwright jelenleg csak sütiket tárol, amikor a böngésző „állapotának” mentéséről és visszaállításáról van szó. Tehát a Playwright által javasolt módszer, a storageState használata a bejelentkezések gyorsítótárazására, nem fog működni a Firebase-szel.
2025 januárja szerint van egy nyitott probléma a Playwrighttal kapcsolatban (lásd: https://github.com/microsoft/playwright/issues/11164). A megoldások (az adott problémánál) azt javasolják, hogy a böngésző IndexedDB API-it használjuk, valamint néhány közzétett Firebase részletet, hogy manuálisan elmentsük/visszaállítsuk az IndexedDB állapotát.

