ค้นหาเว็บไซต์

typescript - Playwright ล้มเหลวในการยืนยันตัวตนกับ Firebase โดยใช้สถานะการจัดเก็บ


ฉันกำลังตั้งค่าเฟรมเวิร์ก Playwright จากศูนย์และพยายามใช้การยืนยันตัวตนซ้ำด้วยความช่วยเหลือของ Playwright storageState และฉันเจอปัญหาเมื่อการทดสอบของฉันล้มเหลวขณะพยายามยืนยันตัวตน

  1. มีไฟล์ติดตั้งที่มีการเข้าสู่ระบบ การดึงข้อมูล และการรักษาสถานะของการเก็บข้อมูล

  1. มีไฟล์คอนฟิกที่มีการทดสอบ พยายามนำทางไปยังหน้าเช่น '/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 ด้วยตนเอง