Skip to content

Commit 7698783

Browse files
committed
perf(test): reuse session layout browser
1 parent 9566ade commit 7698783

1 file changed

Lines changed: 26 additions & 13 deletions

File tree

ui/src/pages/sessions/view.browser.test.ts

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Control UI tests cover sessions behavior.
2-
import { chromium, type Browser, type Page } from "playwright";
3-
import { describe, expect, it } from "vitest";
2+
import { chromium, type Browser, type BrowserContext, type Page } from "playwright";
3+
import { afterAll, beforeAll, describe, expect, it } from "vitest";
44
import { readStyleSheet } from "../../../../test/helpers/ui-style-fixtures.js";
55
import {
66
canRunPlaywrightChromium,
@@ -20,7 +20,7 @@ const describeBrowserLayout = canRunPlaywrightChromium(chromiumExecutablePath)
2020
: describe.skip;
2121

2222
type BrowserFixture = {
23-
browser: Browser;
23+
context: BrowserContext;
2424
page: Page;
2525
};
2626

@@ -163,30 +163,43 @@ function sessionsTableHtml() {
163163
`;
164164
}
165165

166-
async function openFixture(width: number, height: number): Promise<BrowserFixture> {
167-
const browser = await chromium.launch({ executablePath: chromiumExecutablePath, headless: true });
166+
async function openFixture(
167+
browser: Browser,
168+
width: number,
169+
height: number,
170+
): Promise<BrowserFixture> {
171+
const context = await browser.newContext({ viewport: { width, height } });
168172
let page: Page | undefined;
169173
try {
170-
page = await browser.newPage({ viewport: { width, height } });
174+
page = await context.newPage();
171175
await page.setContent(
172176
`<!doctype html><html><head><style>${readUiCss()}</style></head><body>${sessionsTableHtml()}</body></html>`,
173177
);
174-
return { browser, page };
178+
return { context, page };
175179
} catch (error) {
176-
await page?.close().catch(() => {});
177-
await browser.close().catch(() => {});
180+
await context.close().catch(() => {});
178181
throw error;
179182
}
180183
}
181184

182185
async function closeFixture(fixture: BrowserFixture): Promise<void> {
183-
await fixture.page.close().catch(() => {});
184-
await fixture.browser.close().catch(() => {});
186+
await fixture.context.close().catch(() => {});
185187
}
186188

187-
describeBrowserLayout.concurrent("sessions responsive browser layout", () => {
189+
describeBrowserLayout("sessions responsive browser layout", () => {
190+
let browser: Browser;
191+
192+
beforeAll(async () => {
193+
// Browser startup dominates this suite; fresh contexts keep viewport state isolated.
194+
browser = await chromium.launch({ executablePath: chromiumExecutablePath, headless: true });
195+
});
196+
197+
afterAll(async () => {
198+
await browser?.close().catch(() => {});
199+
});
200+
188201
it.each(VIEWPORTS)("keeps the session roster visible at %dx%d", async (width, height) => {
189-
const fixture = await openFixture(width, height);
202+
const fixture = await openFixture(browser, width, height);
190203
const { page } = fixture;
191204
try {
192205
const metrics = await page.evaluate(() => {

0 commit comments

Comments
 (0)