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 59a8ebf..78a4402 100644 --- a/CSF.Extensions.WebDriver.Tests/Factories/WebDriverFactoryIntegrationTests.cs +++ b/CSF.Extensions.WebDriver.Tests/Factories/WebDriverFactoryIntegrationTests.cs @@ -41,11 +41,55 @@ 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()); services.AddWebDriverFactory(configureOptions: configureOptions); + extraRegistrations?.Invoke(services); services.AddLogging(); return services.BuildServiceProvider(); } 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) { diff --git a/CSF.Extensions.WebDriver.Tests/appsettings.WebDriverFactoryIntegrationTests.json b/CSF.Extensions.WebDriver.Tests/appsettings.WebDriverFactoryIntegrationTests.json index a3aeab2..34e6f90 100644 --- a/CSF.Extensions.WebDriver.Tests/appsettings.WebDriverFactoryIntegrationTests.json +++ b/CSF.Extensions.WebDriver.Tests/appsettings.WebDriverFactoryIntegrationTests.json @@ -20,6 +20,14 @@ }, "OmittedDriverAndOptionsType": { "DriverFactoryType": "CSF.Extensions.WebDriver.Factories.WebDriverFactoryIntegrationTests+FakeWebDriverFactory, CSF.Extensions.WebDriver.Tests" + }, + "Chrome": { + "DriverType": "ChromeDriver", + "AddBrowserQuirks": "True" + }, + "Firefox": { + "DriverType": "FirefoxDriver", + "AddBrowserQuirks": "True" } }, "SelectedConfiguration": "DefaultInvalid" diff --git a/CSF.Extensions.WebDriver/Factories/WebDriverConfigurationItemParser.cs b/CSF.Extensions.WebDriver/Factories/WebDriverConfigurationItemParser.cs index f80ccde..2d01a0e 100644 --- a/CSF.Extensions.WebDriver/Factories/WebDriverConfigurationItemParser.cs +++ b/CSF.Extensions.WebDriver/Factories/WebDriverConfigurationItemParser.cs @@ -26,6 +26,12 @@ public WebDriverCreationOptions GetDriverConfiguration(IConfigurationSection con DriverFactoryType = configuration.GetValue(nameof(WebDriverCreationOptions.DriverFactoryType)), }; + 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;