FIx E2E context manager

This commit is contained in:
MartinBraquet
2026-05-29 03:50:38 +02:00
parent 1e3433859b
commit aefbf3e247
5 changed files with 19 additions and 10 deletions

View File

@@ -37,7 +37,7 @@ export default defineConfig({
// No retries by default (even in CI) because it slows the CI pipeline and masks real bugs
// If there is a known intermittent browser timing issue for some tests, it's fine to give 1 retry to those flaky tests
retries: process.env.CI ? 0 : 0,
workers: process.env.CI ? 1 : undefined,
workers: process.env.CI ? 1 : 4,
reporter: [
['list'],
['html', {outputFolder: `tests/reports/playwright-report`, open: 'on-failure'}],

View File

@@ -16,7 +16,7 @@ export class ContextManager {
const context = await this.browser.newContext()
try {
const page = await context.newPage()
const app = new App(page, false)
const app = new App(page)
this.contexts.set(name, app)
return app
} catch (error) {

View File

@@ -7,6 +7,7 @@ import {deleteUser} from '../utils/deleteUser'
export const test = base.extend<{
app: App
app2: App
devOneAccount: UserAccountInformation
devTwoAccount: UserAccountInformation
specAccount: UserAccountInformation
@@ -21,6 +22,14 @@ export const test = base.extend<{
await use(appPage)
await appPage.contextManager?.closeAll()
},
app2: async ({browser}, use) => {
// Totally isolated app which can be used to sign in a different user
// Use {storageState: 'auth/receiver.json'} later on to save compute time by signing in only once
const context = await browser.newContext()
const page = await context.newPage()
await use(new App(page))
await context.close() // guaranteed teardown, even on failure/timeout
},
signedInAccount: async ({app}: {app: App}, use) => {
const account = testAccounts.faker_account()
await seedUser(

View File

@@ -33,7 +33,7 @@ export class App {
constructor(
public readonly page: Page,
createContextManager = true,
// createContextManager = true,
) {
this.auth = new AuthPage(page)
this.compatibility = new CompatibilityPage(page)
@@ -49,11 +49,11 @@ export class App {
this.messages = new MessagesPage(page)
this.context = page.context()
if (createContextManager) {
const browser = page.context().browser()
if (!browser) throw new Error('Could not get Browser from page.context().browser()')
this.contextManager = new ContextManager(browser)
}
// if (createContextManager) {
// const browser = page.context().browser()
// if (!browser) throw new Error('Could not get Browser from page.context().browser()')
// this.contextManager = new ContextManager(browser)
// }
}
async deleteProfileFromSettings() {

View File

@@ -264,10 +264,10 @@ test.describe('when given valid input', () => {
const message = 'This is a message'
test('be able to send a message from the messages page', async ({
app,
app2: receiverApp,
signedInAccount: sender,
signedOutAccount: receiver,
}) => {
const receiverApp = await app.contextManager!.createContext()
await receiverApp.signinWithEmail(receiver)
await app.home.clickMessagesLink()
@@ -281,10 +281,10 @@ test.describe('when given valid input', () => {
test('be able to send a message from the people page', async ({
app,
app2: receiverApp,
signedInAccount: sender,
signedOutAccount: receiver,
}) => {
const receiverApp = await app.contextManager!.createContext()
await receiverApp.signinWithEmail(receiver)
// To pass the min character limit for message intro (250 chars)