diff --git a/packages/playwright-core/src/server/browserType.ts b/packages/playwright-core/src/server/browserType.ts index 62ec63011e..a1121693b5 100644 --- a/packages/playwright-core/src/server/browserType.ts +++ b/packages/playwright-core/src/server/browserType.ts @@ -188,6 +188,8 @@ export abstract class BrowserType extends SdkObject { tempDirectories.push(artifactsDir); if (userDataDir) { + if (!path.isAbsolute(userDataDir)) + userDataDir = path.resolve(userDataDir); // Firefox bails if the profile directory does not exist, Chrome creates it. We ensure consistent behavior here. if (!await existsAsync(userDataDir)) await fs.promises.mkdir(userDataDir, { recursive: true, mode: 0o700 }); diff --git a/tests/library/defaultbrowsercontext-2.spec.ts b/tests/library/defaultbrowsercontext-2.spec.ts index e16dc6b0ba..abf616161e 100644 --- a/tests/library/defaultbrowsercontext-2.spec.ts +++ b/tests/library/defaultbrowsercontext-2.spec.ts @@ -101,6 +101,20 @@ it('should accept userDataDir', async ({ createUserDataDir, browserType }) => { expect(fs.readdirSync(userDataDir).length).toBeGreaterThan(0); }); +it('should accept relative userDataDir', async ({ createUserDataDir, browserType }) => { + const userDataDir = await createUserDataDir(); + const cwd = process.cwd(); + try { + console.log(userDataDir); + process.chdir(userDataDir); + const context = await browserType.launchPersistentContext('foobar'); + expect(fs.readdirSync(path.join(userDataDir, 'foobar')).length).toBeGreaterThan(0); + await context.close(); + } finally { + process.chdir(cwd); + } +}); + it('should restore state from userDataDir', async ({ browserType, server, createUserDataDir, isMac, browserName }) => { it.slow();