diff --git a/WebDriverManager.Tests/ChromeConfigTests.cs b/WebDriverManager.Tests/ChromeConfigTests.cs index efe4f26..83e19be 100644 --- a/WebDriverManager.Tests/ChromeConfigTests.cs +++ b/WebDriverManager.Tests/ChromeConfigTests.cs @@ -1,3 +1,5 @@ +using System; +using System.IO; using System.Text.RegularExpressions; using WebDriverManager.DriverConfigs.Impl; using WebDriverManager.Helpers; @@ -5,8 +7,10 @@ namespace WebDriverManager.Tests { - public class ChromeConfigTests : ChromeConfig + public class ChromeConfigTests : ChromeConfig, IDisposable { + private bool disposedValue; + [Fact] public void VersionTest() { @@ -30,5 +34,49 @@ public void DriverDownloadTest() Assert.NotEmpty(WebDriverFinder.FindFile(GetBinaryName())); } + + + [Fact] + public void SpecificVersionDriverDownloadTest() + { + new DriverManager().SetUpDriver(new ChromeConfig(), "145.0.7632.117"); + + Assert.NotEmpty(WebDriverFinder.FindFile(GetBinaryName())); + } + + /// + /// Cleanup after each test by deleting the downloaded file directory + /// + /// + protected virtual void Dispose(bool disposing) + { + if (!disposedValue) + { + if (disposing) + { + try + { + if (Directory.Exists(WebDriverFinder.FindFile(GetBinaryName()))) + { + var childDirectory = new DirectoryInfo(WebDriverFinder.FindFile(GetBinaryName())); + //Go to parent as child directory is the x64 directory + childDirectory.Parent.Delete(true); + } + } + catch (Exception) + { + // ignored - when run from container, we may not have access to delete the directory + } + } + disposedValue = true; + } + } + + void IDisposable.Dispose() + { + // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method + Dispose(disposing: true); + GC.SuppressFinalize(this); + } } } diff --git a/WebDriverManager.Tests/WebDriverManager.Tests.csproj b/WebDriverManager.Tests/WebDriverManager.Tests.csproj index 5aad857..1e46003 100644 --- a/WebDriverManager.Tests/WebDriverManager.Tests.csproj +++ b/WebDriverManager.Tests/WebDriverManager.Tests.csproj @@ -1,46 +1,46 @@ - - - - false - net472;netcoreapp3.1 - false - - - - - - - - - - - - - - - - - - Always - - - - Always - - - - Always - - - - - - - Always - - - - - trx%3bLogFileName=Results$(TargetFramework).trx - - + + + + false + net472;netcoreapp3.1 + false + + + + + + + + + + + + + + + + + + Always + + + + Always + + + + Always + + + + + + + Always + + + + + trx%3bLogFileName=Results$(TargetFramework).trx + + diff --git a/WebDriverManager/DriverConfigs/IDriverConfig.cs b/WebDriverManager/DriverConfigs/IDriverConfig.cs index bd904a9..4f484c7 100644 --- a/WebDriverManager/DriverConfigs/IDriverConfig.cs +++ b/WebDriverManager/DriverConfigs/IDriverConfig.cs @@ -8,5 +8,6 @@ public interface IDriverConfig string GetBinaryName(); string GetLatestVersion(); string GetMatchingBrowserVersion(); + string GetMatchingExplicitRequest(string version); } } diff --git a/WebDriverManager/DriverConfigs/Impl/ChromeConfig.cs b/WebDriverManager/DriverConfigs/Impl/ChromeConfig.cs index 21abdc0..fc61cdd 100644 --- a/WebDriverManager/DriverConfigs/Impl/ChromeConfig.cs +++ b/WebDriverManager/DriverConfigs/Impl/ChromeConfig.cs @@ -105,6 +105,26 @@ public virtual string GetMatchingBrowserVersion() return _chromeVersion; } + public virtual string GetMatchingExplicitRequest(string desiredVersion) + { + var chromeVersion = VersionHelper.GetVersionWithoutRevision(desiredVersion); + + // Handle downloading versions of the chrome webdriver less than what's supported by the Chrome for Testing known good versions API + // See https://googlechromelabs.github.io/chrome-for-testing for more info + var matchedVersion = new Version(desiredVersion); + if (matchedVersion < MinChromeForTestingDriverVersion) + { + var url = ExactReleaseVersionPatternUrl.Replace("", chromeVersion); + _chromeVersion = GetVersionFromChromeStorage(url); + } + else + { + _chromeVersion = GetVersionFromChromeForTestingApi(chromeVersion).Version; + } + + return _chromeVersion; + } + /// /// Retrieves a chrome driver version string from https://chromedriver.storage.googleapis.com /// @@ -236,5 +256,6 @@ private string GetRawBrowserVersion() return RegistryHelper.GetInstalledBrowserVersionWin("chrome.exe"); #endif } + } } diff --git a/WebDriverManager/DriverConfigs/Impl/EdgeConfig.cs b/WebDriverManager/DriverConfigs/Impl/EdgeConfig.cs index 9c0b679..10ac842 100644 --- a/WebDriverManager/DriverConfigs/Impl/EdgeConfig.cs +++ b/WebDriverManager/DriverConfigs/Impl/EdgeConfig.cs @@ -108,5 +108,11 @@ public string GetMatchingBrowserVersion() return RegistryHelper.GetInstalledBrowserVersionWin("msedge.exe"); #endif } + + public string GetMatchingExplicitRequest(string desiredVersion) + { + return desiredVersion; + } + } } diff --git a/WebDriverManager/DriverConfigs/Impl/FirefoxConfig.cs b/WebDriverManager/DriverConfigs/Impl/FirefoxConfig.cs index 842c13e..d040e90 100644 --- a/WebDriverManager/DriverConfigs/Impl/FirefoxConfig.cs +++ b/WebDriverManager/DriverConfigs/Impl/FirefoxConfig.cs @@ -77,6 +77,11 @@ public virtual string GetMatchingBrowserVersion() #endif } + public string GetMatchingExplicitRequest(string desiredVersion) + { + return desiredVersion; + } + private static string GetUrl(Architecture architecture) { #if NETSTANDARD diff --git a/WebDriverManager/DriverConfigs/Impl/InternetExplorerConfig.cs b/WebDriverManager/DriverConfigs/Impl/InternetExplorerConfig.cs index 4e3e72b..e3fa879 100644 --- a/WebDriverManager/DriverConfigs/Impl/InternetExplorerConfig.cs +++ b/WebDriverManager/DriverConfigs/Impl/InternetExplorerConfig.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Net; using System.Runtime.InteropServices; @@ -62,5 +62,11 @@ public virtual string GetMatchingBrowserVersion() "svcVersion", "Latest"); } + + public string GetMatchingExplicitRequest(string desiredVersion) + { + return desiredVersion; + } + } } diff --git a/WebDriverManager/DriverConfigs/Impl/LegacyEdgeConfig.cs b/WebDriverManager/DriverConfigs/Impl/LegacyEdgeConfig.cs index d1b0356..3486f6e 100644 --- a/WebDriverManager/DriverConfigs/Impl/LegacyEdgeConfig.cs +++ b/WebDriverManager/DriverConfigs/Impl/LegacyEdgeConfig.cs @@ -34,5 +34,10 @@ public virtual string GetMatchingBrowserVersion() { throw new NotImplementedException(); } + + public string GetMatchingExplicitRequest(string desiredVersion) + { + return desiredVersion; + } } } diff --git a/WebDriverManager/DriverConfigs/Impl/OperaConfig.cs b/WebDriverManager/DriverConfigs/Impl/OperaConfig.cs index c66c503..d3c5184 100644 --- a/WebDriverManager/DriverConfigs/Impl/OperaConfig.cs +++ b/WebDriverManager/DriverConfigs/Impl/OperaConfig.cs @@ -49,5 +49,10 @@ public virtual string GetMatchingBrowserVersion() { throw new NotImplementedException(); } + + public string GetMatchingExplicitRequest(string desiredVersion) + { + return desiredVersion; + } } } diff --git a/WebDriverManager/DriverConfigs/Impl/PhantomConfig.cs b/WebDriverManager/DriverConfigs/Impl/PhantomConfig.cs index 4f907a6..58a7964 100644 --- a/WebDriverManager/DriverConfigs/Impl/PhantomConfig.cs +++ b/WebDriverManager/DriverConfigs/Impl/PhantomConfig.cs @@ -33,5 +33,10 @@ public virtual string GetMatchingBrowserVersion() { throw new NotImplementedException(); } + + public string GetMatchingExplicitRequest(string desiredVersion) + { + return desiredVersion; + } } } diff --git a/WebDriverManager/DriverManager.cs b/WebDriverManager/DriverManager.cs index cf8a86d..de056fb 100644 --- a/WebDriverManager/DriverManager.cs +++ b/WebDriverManager/DriverManager.cs @@ -92,7 +92,7 @@ private static string GetVersionToDownload(IDriverConfig config, string version) { case VersionResolveStrategy.MatchingBrowser: return config.GetMatchingBrowserVersion(); case VersionResolveStrategy.Latest: return config.GetLatestVersion(); - default: return version; + default: return config.GetMatchingExplicitRequest(version); } } } diff --git a/WebDriverManager/Helpers/RegistryHelper.cs b/WebDriverManager/Helpers/RegistryHelper.cs index cbba487..b3413f6 100644 --- a/WebDriverManager/Helpers/RegistryHelper.cs +++ b/WebDriverManager/Helpers/RegistryHelper.cs @@ -67,6 +67,7 @@ public static string GetInstalledBrowserVersionWin(string executableFileName) var currentUserPath = Microsoft.Win32.Registry.GetValue( currentUserRegistryPathPattern.Replace("", executableFileName), "", null); + //TODO: If Chromium is installed, that version is returned instead, skip if currentUserPath contains Chromium? if (currentUserPath != null) { return FileVersionInfo.GetVersionInfo(currentUserPath.ToString()).FileVersion;