From 01ececac58af91d6e6ece7726697a48d5bf1849f Mon Sep 17 00:00:00 2001 From: John Yeo Date: Sun, 22 Feb 2026 18:20:30 +0000 Subject: [PATCH] chore: make autumn checkout more reliable --- .../tests/utils/browserPool/browserConfig.ts | 2 +- .../browserPool/playwright/invoiceCheckout.ts | 33 ++++++++++++++----- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/server/tests/utils/browserPool/browserConfig.ts b/server/tests/utils/browserPool/browserConfig.ts index a338f2142..0d8614c1b 100644 --- a/server/tests/utils/browserPool/browserConfig.ts +++ b/server/tests/utils/browserPool/browserConfig.ts @@ -9,7 +9,7 @@ export const USE_KERNEL = !!process.env.USE_KERNEL_BROWSER; // export const USE_KERNEL = false; /** Run browsers in headless mode (set false to watch the browser) */ -export const HEADLESS = false; +export const HEADLESS = true; /** Path to local Chromium/Chrome executable (auto-detected if not set in env) */ export const CHROMIUM_PATH = diff --git a/server/tests/utils/browserPool/playwright/invoiceCheckout.ts b/server/tests/utils/browserPool/playwright/invoiceCheckout.ts index 52ce2a74b..d0a60ab82 100644 --- a/server/tests/utils/browserPool/playwright/invoiceCheckout.ts +++ b/server/tests/utils/browserPool/playwright/invoiceCheckout.ts @@ -29,14 +29,22 @@ export const invoiceCheckout = async ({ let paymentFrame = null; // Try to find the iframe via #payment-element first (embedded Payment Element) + // Use a specific selector to avoid matching the bank search results iframe try { - await page.waitForSelector("#payment-element iframe", { timeout: 10000 }); - paymentFrame = page.frameLocator("#payment-element iframe"); + await page.waitForSelector('#payment-element iframe[title="Secure payment input frame"]', { timeout: 10000 }); + paymentFrame = page.frameLocator('#payment-element iframe[title="Secure payment input frame"]'); console.log("[invoiceCheckout] Found #payment-element iframe"); } catch { - console.log( - "[invoiceCheckout] No #payment-element iframe, searching all frames...", - ); + // Fallback: try first iframe in #payment-element + try { + await page.waitForSelector("#payment-element iframe", { timeout: 5000 }); + paymentFrame = page.frameLocator("#payment-element iframe").first(); + console.log("[invoiceCheckout] Found #payment-element iframe (first)"); + } catch { + console.log( + "[invoiceCheckout] No #payment-element iframe, searching all frames...", + ); + } } // Fallback: search all frames for one containing Stripe payment fields @@ -97,13 +105,22 @@ export const invoiceCheckout = async ({ // Now try to find the payment frame again try { - await page.waitForSelector("#payment-element iframe", { timeout: 10000 }); - paymentFrame = page.frameLocator("#payment-element iframe"); + await page.waitForSelector('#payment-element iframe[title="Secure payment input frame"]', { timeout: 10000 }); + paymentFrame = page.frameLocator('#payment-element iframe[title="Secure payment input frame"]'); console.log( "[invoiceCheckout] Found #payment-element iframe after card click", ); } catch { - // Still try frame search + // Fallback: first iframe + try { + await page.waitForSelector("#payment-element iframe", { timeout: 5000 }); + paymentFrame = page.frameLocator("#payment-element iframe").first(); + console.log( + "[invoiceCheckout] Found #payment-element iframe after card click (first)", + ); + } catch { + // Still try frame search + } } if (!paymentFrame) {