From 9fbdc5e51ff1e9229bf1451b5a48a86ddea22a83 Mon Sep 17 00:00:00 2001 From: David Gwilliam Date: Sat, 25 Apr 2026 21:51:15 -0700 Subject: [PATCH] fix: add browser relaunch logic to Cucumber hooks - Add error handling for browser context creation - Auto-relaunch browser if context creation fails - Add better error logging --- e2e/cucumber/support/hooks.ts | 28 ++++++++++++++++++++++++--- scripts/run-cucumber-tests.sh | 36 +++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 3 deletions(-) create mode 100755 scripts/run-cucumber-tests.sh diff --git a/e2e/cucumber/support/hooks.ts b/e2e/cucumber/support/hooks.ts index 6fb4f14..611dc5b 100644 --- a/e2e/cucumber/support/hooks.ts +++ b/e2e/cucumber/support/hooks.ts @@ -73,9 +73,31 @@ AfterAll(async function () { * Before each scenario: Create new page context */ Before(async function () { - // Create new context and page - world.context = await browser.newContext(); - world.page = await world.context.newPage(); + try { + // Create new context and page + world.context = await browser.newContext(); + world.page = await world.context.newPage(); + } catch (error) { + console.error('❌ Failed to create new browser context:', error); + console.log('🌍 Attempting to relaunch browser...'); + + // Try to relaunch browser + try { + await browser.close(); + } catch (e) { + // Ignore close errors + } + + // Relaunch browser + browser = await chromium.launch({ + headless: process.env.CI ? true : false, + }); + + // Retry creating context + world.context = await browser.newContext(); + world.page = await world.context.newPage(); + console.log('✅ Browser relaunched successfully'); + } // Log console messages for debugging world.page.on('console', msg => { diff --git a/scripts/run-cucumber-tests.sh b/scripts/run-cucumber-tests.sh new file mode 100755 index 0000000..fffaefa --- /dev/null +++ b/scripts/run-cucumber-tests.sh @@ -0,0 +1,36 @@ +#!/bin/bash +# Run Cucumber tests with development database + +# Load development environment +export $(cat .env.development | grep -v '^#' | xargs) + +# Start dev server in background +bun run dev > /tmp/dev-server.log 2>&1 & +DEV_PID=$! + +# Wait for server to be ready +echo "Waiting for dev server to start..." +sleep 15 + +# Check if server is ready +if curl -s http://localhost:3000 > /dev/null 2>&1; then + echo "✅ Dev server is ready" +else + echo "❌ Dev server failed to start" + kill $DEV_PID 2>/dev/null + exit 1 +fi + +# Run Cucumber tests +echo "Running Cucumber tests..." +bun run test:acceptance:cucumber "$@" + +# Capture exit code +EXIT_CODE=$? + +# Stop dev server +echo "Stopping dev server..." +kill $DEV_PID 2>/dev/null +wait $DEV_PID 2>/dev/null + +exit $EXIT_CODE