From caf51e9319cb632a98bc1fdb69ea1ae9c1c35b21 Mon Sep 17 00:00:00 2001 From: pomian <13592821+pomianowski@users.noreply.github.com> Date: Fri, 24 Oct 2025 14:50:43 +0200 Subject: [PATCH 1/4] feat: Add support for altering browser options using custom method --- src/Playwright.Xunit.v3/BrowserTest.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Playwright.Xunit.v3/BrowserTest.cs b/src/Playwright.Xunit.v3/BrowserTest.cs index 1529f8ce6e..d34bab5f1c 100644 --- a/src/Playwright.Xunit.v3/BrowserTest.cs +++ b/src/Playwright.Xunit.v3/BrowserTest.cs @@ -61,4 +61,6 @@ public override async ValueTask DisposeAsync() } public virtual Task<(string, BrowserTypeConnectOptions?)?> ConnectOptionsAsync() => Task.FromResult<(string, BrowserTypeConnectOptions?)?>(null); + + public virtual Task LaunchOptionsAsync() => Task.FromResult(null); } From 68511f2d1fb429bf2a95fdc244389d1b135e5af7 Mon Sep 17 00:00:00 2001 From: pomian <13592821+pomianowski@users.noreply.github.com> Date: Fri, 24 Oct 2025 14:54:46 +0200 Subject: [PATCH 2/4] feat: Add launch options --- src/Playwright.Xunit.v3/BrowserService.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Playwright.Xunit.v3/BrowserService.cs b/src/Playwright.Xunit.v3/BrowserService.cs index 53be2802e3..5000ea51c9 100644 --- a/src/Playwright.Xunit.v3/BrowserService.cs +++ b/src/Playwright.Xunit.v3/BrowserService.cs @@ -42,12 +42,12 @@ private BrowserService(IBrowser browser) Browser = browser; } - public static Task Register(WorkerAwareTest test, IBrowserType browserType, (string, BrowserTypeConnectOptions?)? connectOptions) + public static Task Register(WorkerAwareTest test, IBrowserType browserType, (string, BrowserTypeConnectOptions?)? connectOptions, BrowserTypeConnectOptions? launchOptions) { - return test.RegisterService("Browser", async () => new BrowserService(await CreateBrowser(browserType, connectOptions).ConfigureAwait(false))); + return test.RegisterService("Browser", async () => new BrowserService(await CreateBrowser(browserType, connectOptions, launchOptions).ConfigureAwait(false))); } - private static async Task CreateBrowser(IBrowserType browserType, (string WSEndpoint, BrowserTypeConnectOptions? Options)? connectOptions) + private static async Task CreateBrowser(IBrowserType browserType, (string WSEndpoint, BrowserTypeConnectOptions? Options)? connectOptions, BrowserTypeConnectOptions? launchOptions) { if (connectOptions.HasValue && connectOptions.Value.WSEndpoint != null) { @@ -63,7 +63,9 @@ private static async Task CreateBrowser(IBrowserType browserType, (str { return legacyBrowser; } - return await browserType.LaunchAsync(PlaywrightSettingsProvider.LaunchOptions).ConfigureAwait(false); + + var launchOptions = launchOptions ?? PlaywrightSettingsProvider.LaunchOptions; + return await browserType.LaunchAsync(launchOptions).ConfigureAwait(false); } // TODO: Remove at some point From b1c0618a933f652b51df38cf5efce93fbb7435e8 Mon Sep 17 00:00:00 2001 From: Leszek Pomianowski <13592821+pomianowski@users.noreply.github.com> Date: Fri, 24 Oct 2025 15:05:02 +0200 Subject: [PATCH 3/4] fix: Update executing virtual method --- src/Playwright.Xunit.v3/BrowserService.cs | 6 +++--- src/Playwright.Xunit.v3/BrowserTest.cs | 10 ++++++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/Playwright.Xunit.v3/BrowserService.cs b/src/Playwright.Xunit.v3/BrowserService.cs index 5000ea51c9..f8134f6ec0 100644 --- a/src/Playwright.Xunit.v3/BrowserService.cs +++ b/src/Playwright.Xunit.v3/BrowserService.cs @@ -42,12 +42,12 @@ private BrowserService(IBrowser browser) Browser = browser; } - public static Task Register(WorkerAwareTest test, IBrowserType browserType, (string, BrowserTypeConnectOptions?)? connectOptions, BrowserTypeConnectOptions? launchOptions) + public static Task Register(WorkerAwareTest test, IBrowserType browserType, (string, BrowserTypeConnectOptions?)? connectOptions, BrowserTypeLaunchOptions? launchOptions) { return test.RegisterService("Browser", async () => new BrowserService(await CreateBrowser(browserType, connectOptions, launchOptions).ConfigureAwait(false))); } - private static async Task CreateBrowser(IBrowserType browserType, (string WSEndpoint, BrowserTypeConnectOptions? Options)? connectOptions, BrowserTypeConnectOptions? launchOptions) + private static async Task CreateBrowser(IBrowserType browserType, (string WSEndpoint, BrowserTypeConnectOptions? Options)? connectOptions, BrowserTypeLaunchOptions? launchOptions) { if (connectOptions.HasValue && connectOptions.Value.WSEndpoint != null) { @@ -64,7 +64,7 @@ private static async Task CreateBrowser(IBrowserType browserType, (str return legacyBrowser; } - var launchOptions = launchOptions ?? PlaywrightSettingsProvider.LaunchOptions; + launchOptions ??= PlaywrightSettingsProvider.LaunchOptions; return await browserType.LaunchAsync(launchOptions).ConfigureAwait(false); } diff --git a/src/Playwright.Xunit.v3/BrowserTest.cs b/src/Playwright.Xunit.v3/BrowserTest.cs index d34bab5f1c..a1b3480947 100644 --- a/src/Playwright.Xunit.v3/BrowserTest.cs +++ b/src/Playwright.Xunit.v3/BrowserTest.cs @@ -42,7 +42,7 @@ public async Task NewContext(BrowserNewContextOptions? options public override async ValueTask InitializeAsync() { await base.InitializeAsync().ConfigureAwait(false); - var service = await BrowserService.Register(this, BrowserType, await ConnectOptionsAsync()).ConfigureAwait(false); + var service = await BrowserService.Register(this, BrowserType, await ConnectOptionsAsync(), await LaunchOptionsAsync()).ConfigureAwait(false); Browser = service.Browser; } @@ -60,7 +60,13 @@ public override async ValueTask DisposeAsync() await base.DisposeAsync().ConfigureAwait(false); } + /// + /// Override to provide custom connect options for the browser. + /// public virtual Task<(string, BrowserTypeConnectOptions?)?> ConnectOptionsAsync() => Task.FromResult<(string, BrowserTypeConnectOptions?)?>(null); - + + /// + /// Override to provide custom launch options for the browser. + /// public virtual Task LaunchOptionsAsync() => Task.FromResult(null); } From 9e3d6a858717f0acbeb24de899fa2d285811dba7 Mon Sep 17 00:00:00 2001 From: Leszek Pomianowski <13592821+pomianowski@users.noreply.github.com> Date: Fri, 24 Oct 2025 15:08:38 +0200 Subject: [PATCH 4/4] feat: Allow loading settings without xml reader --- src/Playwright.TestAdapter/PlaywrightSettingsProvider.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Playwright.TestAdapter/PlaywrightSettingsProvider.cs b/src/Playwright.TestAdapter/PlaywrightSettingsProvider.cs index 58ee2594b1..3cb21f04d0 100644 --- a/src/Playwright.TestAdapter/PlaywrightSettingsProvider.cs +++ b/src/Playwright.TestAdapter/PlaywrightSettingsProvider.cs @@ -121,7 +121,12 @@ private static void ValidateBrowserName(string browserName, string fromText, str public void Load(XmlReader reader) { // NOTE: ISettingsProvider::Load is not called when there are no runsettings (either file or passed via command line). - _settings = new PlaywrightSettingsXml(reader); + Load(new PlaywrightSettingsXml(reader)); + } + + public static void Load(PlaywrightSettingsXml settings) + { + _settings = settings; Environment.SetEnvironmentVariable("PW_INTERNAL_ADAPTER_SETTINGS", JsonSerializer.Serialize(_settings)); } }