typescript - Playwright ล้มเหลวในการยืนยันตัวตนกับ Firebase โดยใช้สถานะการจัดเก็บ
ฉันกำลังตั้งค่าเฟรมเวิร์ก Playwright จากศูนย์และพยายามใช้การยืนยันตัวตนซ้ำด้วยความช่วยเหลือของ Playwright storageState และฉันเจอปัญหาเมื่อการทดสอบของฉันล้มเหลวขณะพยายามยืนยันตัวตน
- มีไฟล์ติดตั้งที่มีการเข้าสู่ระบบ การดึงข้อมูล และการรักษาสถานะของการเก็บข้อมูล
มีไฟล์คอนฟิกที่มีการทดสอบ พยายามนำทางไปยังหน้าเช่น '/home' แต่กลับติดอยู่ที่ '/login' ชัดเจนว่าไม่ได้มีการยืนยันตัวตน
ฉันได้ตั้งค่าการส่งต่อสถานะของที่เก็บข้อมูลด้วย 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 สำหรับการอนุญาต บางทีขั้นตอนการเก็บข้อมูลนี้อาจไม่เพียงพอที่จะล็อกอิน?
คำตอบ #1
Firebase ไม่ใช้คุกกี้ในการจัดการสถานะการตรวจสอบสิทธิ์ แต่ใช้ IndexedDB ของเบราว์เซอร์ แพลย์ไรท์ในปัจจุบันเก็บคุกกี้เฉพาะเมื่อบันทึกและกู้คืน "สถานะ" ของเบราว์เซอร์ ดังนั้นวิธีที่แพลย์ไรท์แนะนำในการใช้ storageState สำหรับแคชการเข้าสู่ระบบจะใช้กับ Firebase ไม่ได้
มีปัญหาที่ยังไม่แก้ไข (ณ เดือนมกราคม 2025) กับ Playwright (ดูได้ที่ https://github.com/microsoft/playwright/issues/11164) วิธีแก้ชั่วคราว (ในปัญหานั้น) แนะนำให้ใช้ API ของ IndexedDB ของเบราว์เซอร์รวมกับรายละเอียดที่เผยแพร่เกี่ยวกับ Firebase เพื่อบันทึก/กู้คืนสถานะของ IndexedDB ด้วยตนเอง

