chore: make autumn checkout more reliable

This commit is contained in:
John Yeo
2026-02-22 18:20:30 +00:00
parent aa511f2111
commit 01ececac58
2 changed files with 26 additions and 9 deletions

View File

@@ -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 =

View File

@@ -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) {