Skip to content

Commit 0943c35

Browse files
authored
Download chrome driver version matching with chrome browser version (#91)
Closes #85
1 parent 6ab275f commit 0943c35

21 files changed

+197
-13
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,9 @@ Or architecture:
104104
Or version and architecture:
105105
``new DriverManager().SetUpDriver(new ChromeConfig(), "2.25", Architecture.X64)``
106106

107+
Only for Google Chrome so far, you can specify to automatically download a ```chromedriver.exe``` matching the version of the browser that is installed in your machine:
108+
``new DriverManager().SetUpDriver(new ChromeConfig(), VersionResolveStrategy.MatchingBrowser); ``
109+
107110
#### Manual way:
108111
new DriverManager().SetUpDriver(
109112
"https://chromedriver.storage.googleapis.com/2.25/chromedriver_win32.zip",

WebDriverManager.Tests/EdgeConfigTests.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Text.RegularExpressions;
23
using WebDriverManager.DriverConfigs.Impl;
34
using Xunit;
@@ -21,5 +22,11 @@ public void DriverDownloadTest()
2122
new DriverManager().SetUpDriver(new EdgeConfig());
2223
Assert.NotEmpty(WebDriverFinder.FindFile(GetBinaryName()));
2324
}
25+
26+
[Fact]
27+
public void GetMatchingBrowserVersionTest()
28+
{
29+
Assert.Throws<NotImplementedException>(() => GetMatchingBrowserVersion());
30+
}
2431
}
2532
}

WebDriverManager.Tests/FirefoxConfigTests.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Text.RegularExpressions;
23
using WebDriverManager.DriverConfigs.Impl;
34
using Xunit;
@@ -21,5 +22,11 @@ public void DriverDownloadTest()
2122
new DriverManager().SetUpDriver(new FirefoxConfig());
2223
Assert.NotEmpty(WebDriverFinder.FindFile(GetBinaryName()));
2324
}
25+
26+
[Fact]
27+
public void GetMatchingBrowserVersionTest()
28+
{
29+
Assert.Throws<NotImplementedException>(() => GetMatchingBrowserVersion());
30+
}
2431
}
2532
}

WebDriverManager.Tests/InternetExplorerConfigTests.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Text.RegularExpressions;
23
using WebDriverManager.DriverConfigs.Impl;
34
using Xunit;
@@ -21,5 +22,11 @@ public void DriverDownloadTest()
2122
new DriverManager().SetUpDriver(new InternetExplorerConfig());
2223
Assert.NotEmpty(WebDriverFinder.FindFile(GetBinaryName()));
2324
}
25+
26+
[Fact]
27+
public void GetMatchingBrowserVersionTest()
28+
{
29+
Assert.Throws<NotImplementedException>(() => GetMatchingBrowserVersion());
30+
}
2431
}
2532
}

WebDriverManager.Tests/LegacyEdgeConfigTests.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Text.RegularExpressions;
23
using WebDriverManager.DriverConfigs.Impl;
34
using Xunit;
@@ -21,5 +22,11 @@ public void DriverDownloadTest()
2122
new DriverManager().SetUpDriver(new LegacyEdgeConfig());
2223
Assert.NotEmpty(WebDriverFinder.FindFile(GetBinaryName()));
2324
}
25+
26+
[Fact]
27+
public void GetMatchingBrowserVersionTest()
28+
{
29+
Assert.Throws<NotImplementedException>(() => GetMatchingBrowserVersion());
30+
}
2431
}
2532
}

WebDriverManager.Tests/OperaConfigTests.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Text.RegularExpressions;
23
using WebDriverManager.DriverConfigs.Impl;
34
using Xunit;
@@ -21,5 +22,11 @@ public void DriverDownloadTest()
2122
new DriverManager().SetUpDriver(new OperaConfig());
2223
Assert.NotEmpty(WebDriverFinder.FindFile(GetBinaryName()));
2324
}
25+
26+
[Fact]
27+
public void GetMatchingBrowserVersionTest()
28+
{
29+
Assert.Throws<NotImplementedException>(() => GetMatchingBrowserVersion());
30+
}
2431
}
2532
}

WebDriverManager.Tests/PhantomConfigTests.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Text.RegularExpressions;
23
using WebDriverManager.DriverConfigs.Impl;
34
using Xunit;
@@ -21,5 +22,11 @@ public void DriverDownloadTest()
2122
new DriverManager().SetUpDriver(new PhantomConfig());
2223
Assert.NotEmpty(WebDriverFinder.FindFile(GetBinaryName()));
2324
}
25+
26+
[Fact]
27+
public void GetMatchingBrowserVersionTest()
28+
{
29+
Assert.Throws<NotImplementedException>(() => GetMatchingBrowserVersion());
30+
}
2431
}
2532
}

WebDriverManager.sln

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11

22
Microsoft Visual Studio Solution File, Format Version 12.00
3-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebDriverManager", "WebDriverManager\WebDriverManager.csproj", "{4AB1A17E-F75F-4A23-B986-7C3DE797B068}"
3+
# Visual Studio Version 16
4+
VisualStudioVersion = 16.0.30413.136
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebDriverManager", "WebDriverManager\WebDriverManager.csproj", "{4AB1A17E-F75F-4A23-B986-7C3DE797B068}"
47
EndProject
5-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebDriverManager.Tests", "WebDriverManager.Tests\WebDriverManager.Tests.csproj", "{9C18F531-D338-4610-8CE7-697D7C7DE225}"
8+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebDriverManager.Tests", "WebDriverManager.Tests\WebDriverManager.Tests.csproj", "{9C18F531-D338-4610-8CE7-697D7C7DE225}"
69
EndProject
710
Global
811
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -19,4 +22,10 @@ Global
1922
{9C18F531-D338-4610-8CE7-697D7C7DE225}.Release|Any CPU.ActiveCfg = Release|Any CPU
2023
{9C18F531-D338-4610-8CE7-697D7C7DE225}.Release|Any CPU.Build.0 = Release|Any CPU
2124
EndGlobalSection
25+
GlobalSection(SolutionProperties) = preSolution
26+
HideSolutionNode = FALSE
27+
EndGlobalSection
28+
GlobalSection(ExtensibilityGlobals) = postSolution
29+
SolutionGuid = {9388057F-7595-485B-8564-77F96E217DE4}
30+
EndGlobalSection
2231
EndGlobal
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
namespace WebDriverManager.DriverConfigs
1+
namespace WebDriverManager.DriverConfigs
22
{
33
public interface IDriverConfig
44
{
@@ -7,5 +7,6 @@ public interface IDriverConfig
77
string GetUrl64();
88
string GetBinaryName();
99
string GetLatestVersion();
10+
string GetMatchingBrowserVersion();
1011
}
1112
}

WebDriverManager/DriverConfigs/Impl/ChromeConfig.cs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
1-
using System;
1+
using System;
22
using System.IO;
33
using System.Net;
44
using System.Runtime.InteropServices;
5+
using WebDriverManager.Helpers;
56

67
namespace WebDriverManager.DriverConfigs.Impl
78
{
89
public class ChromeConfig : IDriverConfig
910
{
1011
private const string BaseVersionPatternUrl = "https://chromedriver.storage.googleapis.com/<version>/";
12+
private const string LatestReleaseVersionUrl = "https://chromedriver.storage.googleapis.com/LATEST_RELEASE";
13+
14+
private const string ExactReleaseVersionPatternUrl =
15+
"https://chromedriver.storage.googleapis.com/LATEST_RELEASE_<version>";
16+
17+
private const string BrowserExecutableFileName = "chrome.exe";
1118

1219
public virtual string GetName()
1320
{
@@ -48,7 +55,20 @@ public virtual string GetBinaryName()
4855

4956
public virtual string GetLatestVersion()
5057
{
51-
var uri = new Uri("https://chromedriver.storage.googleapis.com/LATEST_RELEASE");
58+
return GetLatestVersion(LatestReleaseVersionUrl);
59+
}
60+
61+
public virtual string GetMatchingBrowserVersion()
62+
{
63+
var rawChromeBrowserVersion = RegistryHelper.GetInstalledBrowserVersion(BrowserExecutableFileName);
64+
var chromeBrowserVersion = VersionHelper.GetVersionWithoutRevision(rawChromeBrowserVersion);
65+
var url = ExactReleaseVersionPatternUrl.Replace("<version>", chromeBrowserVersion);
66+
return GetLatestVersion(url);
67+
}
68+
69+
private static string GetLatestVersion(string url)
70+
{
71+
var uri = new Uri(url);
5272
var webRequest = WebRequest.Create(uri);
5373
using (var response = webRequest.GetResponse())
5474
{

0 commit comments

Comments
 (0)