diff --git a/src/Playwright.MSTest/BrowserService.cs b/src/Playwright.MSTest/BrowserService.cs index 84c06274b..25df48014 100644 --- a/src/Playwright.MSTest/BrowserService.cs +++ b/src/Playwright.MSTest/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.MSTest/BrowserTest.cs b/src/Playwright.MSTest/BrowserTest.cs index 904ae25bd..16eae9d04 100644 --- a/src/Playwright.MSTest/BrowserTest.cs +++ b/src/Playwright.MSTest/BrowserTest.cs @@ -44,7 +44,7 @@ public async Task NewContextAsync(BrowserNewContextOptions? opt [TestInitialize] public async Task BrowserSetup() { - 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; } @@ -63,4 +63,6 @@ public async Task BrowserTearDown() } public virtual Task<(string, BrowserTypeConnectOptions?)?> ConnectOptionsAsync() => Task.FromResult<(string, BrowserTypeConnectOptions?)?>(null); + + public virtual Task LaunchOptionsAsync() => Task.FromResult(null); } diff --git a/src/Playwright.NUnit/BrowserService.cs b/src/Playwright.NUnit/BrowserService.cs index 0457008df..a829f56ac 100644 --- a/src/Playwright.NUnit/BrowserService.cs +++ b/src/Playwright.NUnit/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.NUnit/BrowserTest.cs b/src/Playwright.NUnit/BrowserTest.cs index 529fe64e5..4d7bcf9b7 100644 --- a/src/Playwright.NUnit/BrowserTest.cs +++ b/src/Playwright.NUnit/BrowserTest.cs @@ -43,7 +43,7 @@ public async Task NewContext(BrowserNewContextOptions? options [SetUp] public async Task BrowserSetup() { - 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; } @@ -62,4 +62,6 @@ public async Task BrowserTearDown() } public virtual Task<(string, BrowserTypeConnectOptions?)?> ConnectOptionsAsync() => Task.FromResult<(string, BrowserTypeConnectOptions?)?>(null); + + public virtual Task LaunchOptionsAsync() => Task.FromResult(null); } diff --git a/src/Playwright.TestingHarnessTest/tests/mstest.spec.ts b/src/Playwright.TestingHarnessTest/tests/mstest.spec.ts index 83ba2685e..c04da6b18 100644 --- a/src/Playwright.TestingHarnessTest/tests/mstest.spec.ts +++ b/src/Playwright.TestingHarnessTest/tests/mstest.spec.ts @@ -535,3 +535,41 @@ 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.MSTest; + using Microsoft.VisualStudio.TestTools.UnitTesting; + + namespace Playwright.TestingHarnessTest.MSTest; + + [TestClass] + public class : PageTest + { + [TestMethod] + public async Task Test() + { + await Page.GotoAsync("about:blank"); + Console.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.TestingHarnessTest/tests/nunit.spec.ts b/src/Playwright.TestingHarnessTest/tests/nunit.spec.ts index 4d7965280..8930ae733 100644 --- a/src/Playwright.TestingHarnessTest/tests/nunit.spec.ts +++ b/src/Playwright.TestingHarnessTest/tests/nunit.spec.ts @@ -532,3 +532,40 @@ 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.NUnit; + using NUnit.Framework; + + namespace Playwright.TestingHarnessTest.NUnit; + + public class : PageTest + { + [Test] + public async Task Test() + { + await Page.GotoAsync("about:blank"); + Console.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"); + }); +});