diff --git a/src/Playwright.TestAdapter/PlaywrightSettingsProvider.cs b/src/Playwright.TestAdapter/PlaywrightSettingsProvider.cs index 58ee2594b..3cb21f04d 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)); } } diff --git a/src/Playwright.Xunit.v3/BrowserService.cs b/src/Playwright.Xunit.v3/BrowserService.cs index 53be2802e..f8134f6ec 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, BrowserTypeLaunchOptions? 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, BrowserTypeLaunchOptions? 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); + + launchOptions ??= PlaywrightSettingsProvider.LaunchOptions; + return await browserType.LaunchAsync(launchOptions).ConfigureAwait(false); } // TODO: Remove at some point diff --git a/src/Playwright.Xunit.v3/BrowserTest.cs b/src/Playwright.Xunit.v3/BrowserTest.cs index 1529f8ce6..a1b348094 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,5 +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); }