package e2eutil import ( "testing" "github.com/mxschmitt/playwright-go" ) // NewPlaywright initializes Playwright and returns a browser instance. // It automatically registers cleanup handlers for test teardown. func NewPlaywright(t *testing.T) (*playwright.Playwright, playwright.Browser, error) { t.Helper() // Run Playwright pw, err := playwright.Run() if err != nil { return nil, nil, err } // Register cleanup for Playwright t.Cleanup(func() { if err := pw.Stop(); err != nil { t.Logf("Failed to stop Playwright: %v", err) } }) // Launch Chromium browser with headless options browser, err := pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{ Headless: playwright.Bool(true), Args: []string{ "--disable-gpu", "--disable-dev-shm-usage", "--no-sandbox", }, }) if err != nil { return nil, nil, err } // Register cleanup for browser t.Cleanup(func() { if err := browser.Close(); err != nil { t.Logf("Failed to close browser: %v", err) } }) return pw, browser, nil } // NewBrowserContext creates a new browser context with a standard viewport. // It automatically registers cleanup handlers for test teardown. func NewBrowserContext(browser playwright.Browser, t *testing.T) (playwright.BrowserContext, error) { t.Helper() // Create browser context with standard viewport context, err := browser.NewContext(playwright.BrowserNewContextOptions{ Viewport: &playwright.Size{ Width: 1280, Height: 720, }, }) if err != nil { return nil, err } // Register cleanup t.Cleanup(func() { if err := context.Close(); err != nil { t.Logf("Failed to close browser context: %v", err) } }) return context, nil }