diff --git a/packages/playwright-core/src/client/browserType.ts b/packages/playwright-core/src/client/browserType.ts index 1932d6e2d8..789203cc00 100644 --- a/packages/playwright-core/src/client/browserType.ts +++ b/packages/playwright-core/src/client/browserType.ts @@ -67,6 +67,7 @@ export class BrowserType extends ChannelOwner imple options = { ...this._playwright._defaultLaunchOptions, ...options }; const launchOptions: channels.BrowserTypeLaunchParams = { ...options, + tracesDir: options.tracesDir ?? this._playwright._defaultTracesDir, ignoreDefaultArgs: Array.isArray(options.ignoreDefaultArgs) ? options.ignoreDefaultArgs : undefined, ignoreAllDefaultArgs: !!options.ignoreDefaultArgs && !Array.isArray(options.ignoreDefaultArgs), env: options.env ? envObjectToArray(options.env) : undefined, diff --git a/packages/playwright-core/src/client/fetch.ts b/packages/playwright-core/src/client/fetch.ts index 07cee65871..3d49b72b8d 100644 --- a/packages/playwright-core/src/client/fetch.ts +++ b/packages/playwright-core/src/client/fetch.ts @@ -65,7 +65,7 @@ export class APIRequest implements api.APIRequest { options = { ...this._playwright._defaultContextOptions, ...options, - timeout: this._playwright._defaultActionTimeout ?? options.timeout, + timeout: this._playwright._defaultContextTimeout ?? options.timeout, }; const storageState = typeof options.storageState === 'string' ? JSON.parse(await fs.promises.readFile(options.storageState, 'utf8')) : @@ -74,12 +74,12 @@ export class APIRequest implements api.APIRequest { ...options, extraHTTPHeaders: options.extraHTTPHeaders ? headersObjectToArray(options.extraHTTPHeaders) : undefined, storageState, - tracesDir: this._playwright._tracesDir, + tracesDir: this._playwright._defaultTracesDir, clientCertificates: await toClientCertificatesProtocol(options.clientCertificates), })).request); this._contexts.add(context); context._request = this; - context._tracing._tracesDir = this._playwright._tracesDir; + context._tracing._tracesDir = this._playwright._defaultTracesDir; await context._instrumentation.runAfterCreateRequestContext(context); return context; } diff --git a/packages/playwright-core/src/client/playwright.ts b/packages/playwright-core/src/client/playwright.ts index f13af6b1f9..921de3a7c6 100644 --- a/packages/playwright-core/src/client/playwright.ts +++ b/packages/playwright-core/src/client/playwright.ts @@ -42,8 +42,7 @@ export class Playwright extends ChannelOwner { _defaultContextOptions?: BrowserContextOptions; _defaultContextTimeout?: number; _defaultContextNavigationTimeout?: number; - _defaultActionTimeout?: number; - _tracesDir?: string; + _defaultTracesDir?: string; constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.PlaywrightInitializer) { super(parent, type, guid, initializer); @@ -83,7 +82,7 @@ export class Playwright extends ChannelOwner { return (channel as any)._object; } - _browserTypes(): BrowserType[] { + private _browserTypes(): BrowserType[] { return [this.chromium, this.firefox, this.webkit, this._bidiChromium, this._bidiFirefox]; } diff --git a/packages/playwright/src/index.ts b/packages/playwright/src/index.ts index 5966bd6c95..1a2e4cbf93 100644 --- a/packages/playwright/src/index.ts +++ b/packages/playwright/src/index.ts @@ -83,11 +83,11 @@ const playwrightFixtures: Fixtures = ({ options.headless = headless; if (channel !== undefined) options.channel = channel; - options.tracesDir = tracing().tracesDir(); - + playwright._defaultTracesDir = tracing().tracesDir(); playwright._defaultLaunchOptions = options; await use(options); playwright._defaultLaunchOptions = undefined; + playwright._defaultTracesDir = undefined; }, { scope: 'worker', auto: true, box: true }], browser: [async ({ playwright, browserName, _browserOptions, connectOptions, _reuseContext }, use, testInfo) => { @@ -234,12 +234,12 @@ const playwrightFixtures: Fixtures = ({ playwright._defaultContextOptions = _combinedContextOptions; playwright._defaultContextTimeout = actionTimeout || 0; playwright._defaultContextNavigationTimeout = navigationTimeout || 0; - playwright._tracesDir = tracing().tracesDir(); + playwright._defaultTracesDir = tracing().tracesDir(); await use(); playwright._defaultContextOptions = undefined; playwright._defaultContextTimeout = undefined; playwright._defaultContextNavigationTimeout = undefined; - playwright._tracesDir = undefined; + playwright._defaultTracesDir = undefined; }, { auto: 'all-hooks-included', title: 'context configuration', box: true } as any], _setupArtifacts: [async ({ playwright, screenshot }, use, testInfo) => { diff --git a/tests/config/remoteServer.ts b/tests/config/remoteServer.ts index ba6df56cb8..76df6c180f 100644 --- a/tests/config/remoteServer.ts +++ b/tests/config/remoteServer.ts @@ -82,7 +82,7 @@ export class RemoteServer implements PlaywrightServer { async _start(childProcess: CommonFixtures['childProcess'], browserType: BrowserType, channel: string, remoteServerOptions: RemoteServerOptions = {}) { this._browserType = browserType; - const browserOptions = (browserType as any).plawright._defaultLaunchOptions; + const browserOptions = (browserType as any)._plawright._defaultLaunchOptions; // Copy options to prevent a large JSON string when launching subprocess. // Otherwise, we get `Error: spawn ENAMETOOLONG` on Windows. const launchOptions: Parameters[0] = { diff --git a/tests/library/browsertype-connect.spec.ts b/tests/library/browsertype-connect.spec.ts index 8a136e7418..d9a446c034 100644 --- a/tests/library/browsertype-connect.spec.ts +++ b/tests/library/browsertype-connect.spec.ts @@ -630,14 +630,14 @@ for (const kind of ['launchServer', 'run-server'] as const) { test('should filter launch options', async ({ connect, startRemoteServer, server, browserType }, testInfo) => { const tracesDir = testInfo.outputPath('traces'); - const oldTracesDir = (browserType as any)._playwright._defaultLaunchOptions.tracesDir; - (browserType as any)._playwright._defaultLaunchOptions.tracesDir = tracesDir; + const oldTracesDir = (browserType as any)._playwright._defaultTracesDir; + (browserType as any)._playwright._defaultTracesDir = tracesDir; const remoteServer = await startRemoteServer(kind); const browser = await connect(remoteServer.wsEndpoint()); const page = await browser.newPage(); await page.goto(server.EMPTY_PAGE); await browser.close(); - (browserType as any)._playwright._defaultLaunchOptions.tracesDir = oldTracesDir; + (browserType as any)._playwright._defaultTracesDir = oldTracesDir; expect(fs.existsSync(tracesDir)).toBe(false); }); diff --git a/tests/library/tracing.spec.ts b/tests/library/tracing.spec.ts index 2c2244edf6..2639dbe0e8 100644 --- a/tests/library/tracing.spec.ts +++ b/tests/library/tracing.spec.ts @@ -368,8 +368,8 @@ test('should not crash when browser closes mid-trace', async ({ browserType, ser }); test('should survive browser.close with auto-created traces dir', async ({ browserType }, testInfo) => { - const oldTracesDir = (browserType as any)._playwright._defaultLaunchOptions.tracesDir; - (browserType as any)._playwright._defaultLaunchOptions.tracesDir = undefined; + const oldTracesDir = (browserType as any)._playwright._defaultTracesDir; + (browserType as any)._playwright._defaultTracesDir = undefined; const browser = await browserType.launch(); const page = await browser.newPage(); await page.context().tracing.start(); @@ -394,7 +394,7 @@ test('should survive browser.close with auto-created traces dir', async ({ brows ]); done.value = true; - (browserType as any)._playwright._defaultLaunchOptions.tracesDir = oldTracesDir; + (browserType as any)._playwright._defaultTracesDir = oldTracesDir; }); test('should not stall on dialogs', async ({ page, context, server }) => {