From 06761fc751811cd79cc2c2d03a8fb183abf2828e Mon Sep 17 00:00:00 2001 From: Craig Fowler Date: Mon, 2 Feb 2026 20:57:20 +0000 Subject: [PATCH 1/4] WIP #54 - Add failing integration test I was right in the Screenplay repo, this functionality is not working correctly. --- .../WebDriverFactoryIntegrationTests.cs | 44 ++++++++++++++++++- ...ings.WebDriverFactoryIntegrationTests.json | 6 +++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/CSF.Extensions.WebDriver.Tests/Factories/WebDriverFactoryIntegrationTests.cs b/CSF.Extensions.WebDriver.Tests/Factories/WebDriverFactoryIntegrationTests.cs index 59a8ebf..19d31a0 100644 --- a/CSF.Extensions.WebDriver.Tests/Factories/WebDriverFactoryIntegrationTests.cs +++ b/CSF.Extensions.WebDriver.Tests/Factories/WebDriverFactoryIntegrationTests.cs @@ -41,7 +41,49 @@ public void DriverTypeNorOptionsTypeShouldBeMandatoryIfACustomFactoryTypeIsSpeci Assert.That(() => driver.WebDriver.GetBrowserId(), Is.Not.Null); } - IServiceProvider GetServiceProvider(Action? configureOptions = null) + [Test] + public void GetWebDriverShouldReturnADriverWithTheCorrectQuirksForChrome() + { + var services = GetServiceProvider(extraRegistrations: services => services.AddWebDriverQuirks(GetCommonBrowserQuirks())); + + var driverFactory = services.GetRequiredService(); + using var driver = driverFactory.GetWebDriver("Chrome"); + + Assert.Multiple(() => + { + Assert.That(driver.WebDriver.HasQuirk("IAmChrome"), Is.True, "Chrome quirk"); + Assert.That(driver.WebDriver.HasQuirk("IAmFirefox"), Is.False, "Firefox quirk"); + }); + } + + [Test] + public void GetWebDriverShouldReturnADriverWithTheCorrectQuirksForFirefox() + { + var services = GetServiceProvider(extraRegistrations: services => services.AddWebDriverQuirks(GetCommonBrowserQuirks())); + + var driverFactory = services.GetRequiredService(); + using var driver = driverFactory.GetWebDriver("Firefox"); + + Assert.Multiple(() => + { + Assert.That(driver.WebDriver.HasQuirk("IAmChrome"), Is.False, "Chrome quirk"); + Assert.That(driver.WebDriver.HasQuirk("IAmFirefox"), Is.True, "Firefox quirk"); + }); + } + + Quirks.QuirksData GetCommonBrowserQuirks() + { + return new () + { + Quirks = new Dictionary + { + { "IAmChrome", new () { AffectedBrowsers = new HashSet() { new () { Name = "chrome" } } } }, + { "IAmFirefox", new () { AffectedBrowsers = new HashSet() { new () { Name = "firefox" } } } }, + } + }; + } + + IServiceProvider GetServiceProvider(Action? configureOptions = null, Action? extraRegistrations = null) { var services = new ServiceCollection(); services.AddSingleton(GetConfiguration()); diff --git a/CSF.Extensions.WebDriver.Tests/appsettings.WebDriverFactoryIntegrationTests.json b/CSF.Extensions.WebDriver.Tests/appsettings.WebDriverFactoryIntegrationTests.json index a3aeab2..7f0534d 100644 --- a/CSF.Extensions.WebDriver.Tests/appsettings.WebDriverFactoryIntegrationTests.json +++ b/CSF.Extensions.WebDriver.Tests/appsettings.WebDriverFactoryIntegrationTests.json @@ -20,6 +20,12 @@ }, "OmittedDriverAndOptionsType": { "DriverFactoryType": "CSF.Extensions.WebDriver.Factories.WebDriverFactoryIntegrationTests+FakeWebDriverFactory, CSF.Extensions.WebDriver.Tests" + }, + "Chrome": { + "DriverType": "ChromeDriver" + }, + "Firefox": { + "DriverType": "FirefoxDriver" } }, "SelectedConfiguration": "DefaultInvalid" From 081c55fec29d9ade69f092f628e13d99cd325264 Mon Sep 17 00:00:00 2001 From: Craig Fowler Date: Mon, 2 Feb 2026 21:39:15 +0000 Subject: [PATCH 2/4] WIP #54 - Fix missing quirks However, I've regressed something in the process. --- .../CSF.Extensions.WebDriver.Tests.csproj | 2 +- .../Factories/WebDriverFactoryIntegrationTests.cs | 4 +++- .../appsettings.WebDriverFactoryIntegrationTests.json | 6 ++++-- .../Factories/WebDriverConfigurationItemParser.cs | 2 ++ 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/CSF.Extensions.WebDriver.Tests/CSF.Extensions.WebDriver.Tests.csproj b/CSF.Extensions.WebDriver.Tests/CSF.Extensions.WebDriver.Tests.csproj index b0a818d..3231f5e 100644 --- a/CSF.Extensions.WebDriver.Tests/CSF.Extensions.WebDriver.Tests.csproj +++ b/CSF.Extensions.WebDriver.Tests/CSF.Extensions.WebDriver.Tests.csproj @@ -32,7 +32,7 @@ - PreserveNewest + Always diff --git a/CSF.Extensions.WebDriver.Tests/Factories/WebDriverFactoryIntegrationTests.cs b/CSF.Extensions.WebDriver.Tests/Factories/WebDriverFactoryIntegrationTests.cs index 19d31a0..78a4402 100644 --- a/CSF.Extensions.WebDriver.Tests/Factories/WebDriverFactoryIntegrationTests.cs +++ b/CSF.Extensions.WebDriver.Tests/Factories/WebDriverFactoryIntegrationTests.cs @@ -83,11 +83,13 @@ Quirks.QuirksData GetCommonBrowserQuirks() }; } - IServiceProvider GetServiceProvider(Action? configureOptions = null, Action? extraRegistrations = null) + IServiceProvider GetServiceProvider(Action? configureOptions = null, + Action? extraRegistrations = null) { var services = new ServiceCollection(); services.AddSingleton(GetConfiguration()); services.AddWebDriverFactory(configureOptions: configureOptions); + extraRegistrations?.Invoke(services); services.AddLogging(); return services.BuildServiceProvider(); } diff --git a/CSF.Extensions.WebDriver.Tests/appsettings.WebDriverFactoryIntegrationTests.json b/CSF.Extensions.WebDriver.Tests/appsettings.WebDriverFactoryIntegrationTests.json index 7f0534d..34e6f90 100644 --- a/CSF.Extensions.WebDriver.Tests/appsettings.WebDriverFactoryIntegrationTests.json +++ b/CSF.Extensions.WebDriver.Tests/appsettings.WebDriverFactoryIntegrationTests.json @@ -22,10 +22,12 @@ "DriverFactoryType": "CSF.Extensions.WebDriver.Factories.WebDriverFactoryIntegrationTests+FakeWebDriverFactory, CSF.Extensions.WebDriver.Tests" }, "Chrome": { - "DriverType": "ChromeDriver" + "DriverType": "ChromeDriver", + "AddBrowserQuirks": "True" }, "Firefox": { - "DriverType": "FirefoxDriver" + "DriverType": "FirefoxDriver", + "AddBrowserQuirks": "True" } }, "SelectedConfiguration": "DefaultInvalid" diff --git a/CSF.Extensions.WebDriver/Factories/WebDriverConfigurationItemParser.cs b/CSF.Extensions.WebDriver/Factories/WebDriverConfigurationItemParser.cs index f80ccde..8a9025d 100644 --- a/CSF.Extensions.WebDriver/Factories/WebDriverConfigurationItemParser.cs +++ b/CSF.Extensions.WebDriver/Factories/WebDriverConfigurationItemParser.cs @@ -24,6 +24,8 @@ public WebDriverCreationOptions GetDriverConfiguration(IConfigurationSection con OptionsType = configuration.GetValue(nameof(WebDriverCreationOptions.OptionsType)), GridUrl = configuration.GetValue(nameof(WebDriverCreationOptions.GridUrl)), DriverFactoryType = configuration.GetValue(nameof(WebDriverCreationOptions.DriverFactoryType)), + AddBrowserIdentification = configuration.GetValue(nameof(WebDriverCreationOptions.AddBrowserIdentification)), + AddBrowserQuirks = configuration.GetValue(nameof(WebDriverCreationOptions.AddBrowserQuirks)), }; if(!TryGetDriverType(creationOptions, configuration, out var driverType)) From 5adcf5c152ab06956d1465e636ebca05e9b188b3 Mon Sep 17 00:00:00 2001 From: Craig Fowler Date: Mon, 2 Feb 2026 21:44:18 +0000 Subject: [PATCH 3/4] Resolve #54 - Browser quirks fixed --- .../Factories/WebDriverConfigurationItemParser.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/CSF.Extensions.WebDriver/Factories/WebDriverConfigurationItemParser.cs b/CSF.Extensions.WebDriver/Factories/WebDriverConfigurationItemParser.cs index 8a9025d..2d01a0e 100644 --- a/CSF.Extensions.WebDriver/Factories/WebDriverConfigurationItemParser.cs +++ b/CSF.Extensions.WebDriver/Factories/WebDriverConfigurationItemParser.cs @@ -24,10 +24,14 @@ public WebDriverCreationOptions GetDriverConfiguration(IConfigurationSection con OptionsType = configuration.GetValue(nameof(WebDriverCreationOptions.OptionsType)), GridUrl = configuration.GetValue(nameof(WebDriverCreationOptions.GridUrl)), DriverFactoryType = configuration.GetValue(nameof(WebDriverCreationOptions.DriverFactoryType)), - AddBrowserIdentification = configuration.GetValue(nameof(WebDriverCreationOptions.AddBrowserIdentification)), - AddBrowserQuirks = configuration.GetValue(nameof(WebDriverCreationOptions.AddBrowserQuirks)), }; + if(configuration.GetSection(nameof(WebDriverCreationOptions.AddBrowserIdentification)).Exists()) + creationOptions.AddBrowserIdentification = configuration.GetValue(nameof(WebDriverCreationOptions.AddBrowserIdentification)); + + if(configuration.GetSection(nameof(WebDriverCreationOptions.AddBrowserQuirks)).Exists()) + creationOptions.AddBrowserQuirks = configuration.GetValue(nameof(WebDriverCreationOptions.AddBrowserQuirks)); + if(!TryGetDriverType(creationOptions, configuration, out var driverType)) return null; From e448f92acf9b05284869d2f56551187db5f9b071 Mon Sep 17 00:00:00 2001 From: Craig Fowler Date: Mon, 2 Feb 2026 21:54:35 +0000 Subject: [PATCH 4/4] Add test which proves 'no change required' for #53 --- .../Identification/BrowserInfoMatcherTests.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CSF.Extensions.WebDriver.Tests/Identification/BrowserInfoMatcherTests.cs b/CSF.Extensions.WebDriver.Tests/Identification/BrowserInfoMatcherTests.cs index 7f7ffb5..986ba5a 100644 --- a/CSF.Extensions.WebDriver.Tests/Identification/BrowserInfoMatcherTests.cs +++ b/CSF.Extensions.WebDriver.Tests/Identification/BrowserInfoMatcherTests.cs @@ -13,6 +13,14 @@ public void MatchesShouldReturnTrueWhenOnlyTheBrowserNameMatches(BrowserInfoMatc Assert.That(() => sut.Matches(browserId, browserInfo), Is.True); } + [Test,AutoMoqData] + public void MatchesShouldUseACaseInsensitiveMatchForBrowserName(BrowserInfoMatcher sut) + { + var browserId = new BrowserId("FOOBROWSER", "BarPlatform", MissingBrowserVersion.Instance); + var browserInfo = new BrowserInfo { Name = "foobrowser" }; + Assert.That(() => sut.Matches(browserId, browserInfo), Is.True); + } + [Test,AutoMoqData] public void MatchesShouldReturnFalseIfTheBrowserNameDoesNotMatch(BrowserInfoMatcher sut) {