diff --git a/src/Playwright.TestingHarnessTest/tests/xunit.v3.spec.ts b/src/Playwright.TestingHarnessTest/tests/xunit.v3.spec.ts index b27823158..5b67d8fd8 100644 --- a/src/Playwright.TestingHarnessTest/tests/xunit.v3.spec.ts +++ b/src/Playwright.TestingHarnessTest/tests/xunit.v3.spec.ts @@ -572,3 +572,47 @@ test.describe('ConnectOptions', () => { expect(result.total).toBe(1); }); }); + +test.describe('LaunchOptions', () => { + test('should be able to override launch options via LaunchOptionsAsync', async ({ runTest }) => { + const result = await runTest({ + 'ExampleTests.cs': ` + using System; + using System.Threading.Tasks; + using Microsoft.Playwright; + using Microsoft.Playwright.Xunit.v3; + using Xunit; + + namespace Playwright.TestingHarnessTest.Xunit; + + public class : PageTest + { + private readonly ITestOutputHelper output; + + public (ITestOutputHelper output) + { + this.output = output; + } + + [Fact] + public async Task Test() + { + await Page.GotoAsync("about:blank"); + output.WriteLine("User-Agent: " + await Page.EvaluateAsync("() => navigator.userAgent")); + } + + public override Task LaunchOptionsAsync() + { + return Task.FromResult(new BrowserTypeLaunchOptions + { + Args = new[] { "--user-agent=hello" }, + }); + } + }`, + }, 'dotnet test'); + expect(result.passed).toBe(1); + expect(result.failed).toBe(0); + expect(result.total).toBe(1); + expect(result.stdout).toContain("User-Agent: hello"); + }); +}); diff --git a/src/Playwright.Xunit.v3/BrowserService.cs b/src/Playwright.Xunit.v3/BrowserService.cs index 53be2802e..ae9a3671e 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,7 @@ private static async Task CreateBrowser(IBrowserType browserType, (str { return legacyBrowser; } - return await browserType.LaunchAsync(PlaywrightSettingsProvider.LaunchOptions).ConfigureAwait(false); + return await browserType.LaunchAsync(launchOptions ?? PlaywrightSettingsProvider.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..4106044f1 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; } @@ -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); }