import { FullConfig, FullProject, chromium, expect } from '@playwright/test'; import { keyCloakSignIn } from './utils-common'; const saveStorageState = async ( browserConfig: FullProject, ) => { if (!browserConfig) { throw new Error('No browser config found'); } const browserName = browserConfig.name || 'chromium'; const { storageState, ...useConfig } = browserConfig.use; const browser = await chromium.launch(); const context = await browser.newContext(useConfig); const page = await context.newPage(); try { // eslint-disable-next-line playwright/no-networkidle await page.goto('/', { waitUntil: 'networkidle' }); await page.content(); await expect(page.getByText('Docs').first()).toBeVisible(); await keyCloakSignIn(page, browserName); await expect( page.locator('header').first().getByRole('button', { name: 'Logout', }), ).toBeVisible({ timeout: 10000 }); await page.context().storageState({ path: storageState as string, }); } catch (error) { console.log(error); await page.screenshot({ path: `./screenshots/${browserName}-${Date.now()}.png`, }); // Get console logs const consoleLogs = await page.evaluate(() => console.log(window.console.log), ); console.log(consoleLogs); } finally { await browser.close(); } }; async function globalSetup(config: FullConfig) { const chromeConfig = config.projects.find((p) => p.name === 'chromium')!; const firefoxConfig = config.projects.find((p) => p.name === 'firefox')!; const webkitConfig = config.projects.find((p) => p.name === 'webkit')!; await saveStorageState(chromeConfig); await saveStorageState(webkitConfig); await saveStorageState(firefoxConfig); } export default globalSetup;