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;