Skip to content

Commit a4f24ca

Browse files
committed
Migrate from HtmlAgilityPack to AngleSharp
1 parent d024ec7 commit a4f24ca

File tree

12 files changed

+145
-50
lines changed

12 files changed

+145
-50
lines changed

IntegrationTests/IntegrationTests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
<Compile Include="BinaryServiceTests.cs" />
5858
<Compile Include="Properties\AssemblyInfo.cs" />
5959
<Compile Include="VariableServiceTests.cs" />
60+
<Compile Include="VersionTests.cs" />
6061
</ItemGroup>
6162
<ItemGroup>
6263
<ProjectReference Include="..\WebDriverManager\WebDriverManager.csproj">

IntegrationTests/VersionTests.cs

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
using System.Text.RegularExpressions;
2+
using WebDriverManager.DriverConfigs.Impl;
3+
using Xunit;
4+
5+
namespace IntegrationTests
6+
{
7+
public class VersionTests
8+
{
9+
[Fact]
10+
public void ChromeVersionResultNotEmptyAndMatch()
11+
{
12+
var chromeConfig = new ChromeConfig();
13+
var version = chromeConfig.GetLatestVersion();
14+
var regex = new Regex(@"^\d+\.\d+$");
15+
var match = regex.Match(version);
16+
Assert.NotEmpty(version);
17+
Assert.True(match.Success);
18+
}
19+
20+
[Fact]
21+
public void EdgeVersionResultNotEmptyAndMatch()
22+
{
23+
var edgeConfig = new EdgeConfig();
24+
var version = edgeConfig.GetLatestVersion();
25+
var regex = new Regex(@"^\d+\.\d+$");
26+
var match = regex.Match(version);
27+
Assert.NotEmpty(version);
28+
Assert.True(match.Success);
29+
}
30+
31+
[Fact]
32+
public void FirefoxVersionResultNotEmptyAndMatch()
33+
{
34+
var firefoxConfig = new FirefoxConfig();
35+
var version = firefoxConfig.GetLatestVersion();
36+
var regex = new Regex(@"^\d+\.\d+\.\d+$");
37+
var match = regex.Match(version);
38+
Assert.NotEmpty(version);
39+
Assert.True(match.Success);
40+
}
41+
42+
[Fact]
43+
public void IEVersionResultNotEmptyAndMatch()
44+
{
45+
var ieConfig = new IEConfig();
46+
var version = ieConfig.GetLatestVersion();
47+
var regex = new Regex(@"^\d+\.\d+\.\d+$");
48+
var match = regex.Match(version);
49+
Assert.NotEmpty(version);
50+
Assert.True(match.Success);
51+
}
52+
53+
[Fact]
54+
public void OperaVersionResultNotEmptyAndMatch()
55+
{
56+
var operaConfig = new OperaConfig();
57+
var version = operaConfig.GetLatestVersion();
58+
var regex = new Regex(@"^\d+\.\d+\.\d+$");
59+
var match = regex.Match(version);
60+
Assert.NotEmpty(version);
61+
Assert.True(match.Success);
62+
}
63+
64+
[Fact]
65+
public void PhantomVersionResultNotEmptyAndMatch()
66+
{
67+
var phantomConfig = new PhantomConfig();
68+
var version = phantomConfig.GetLatestVersion();
69+
var regex = new Regex(@"^\d+\.\d+\.\d+$");
70+
var match = regex.Match(version);
71+
Assert.NotEmpty(version);
72+
Assert.True(match.Success);
73+
}
74+
}
75+
}

WebDriverManager/DriverConfigs/Impl/EdgeConfig.cs

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Linq;
22
using System.Net;
3-
using HtmlAgilityPack;
3+
using AngleSharp;
4+
using AngleSharp.Parser.Html;
45

56
namespace WebDriverManager.DriverConfigs.Impl
67
{
@@ -30,28 +31,33 @@ public string GetLatestVersion()
3031
{
3132
using (var client = new WebClient())
3233
{
33-
var doc = new HtmlDocument();
34-
var htmlCode =
35-
client.DownloadString("https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver");
36-
doc.LoadHtml(htmlCode);
37-
var itemList = doc.DocumentNode.SelectNodes("//*[@class='driver-download']/p")
38-
.Select(p => p.InnerText).ToList();
39-
var version = itemList.FirstOrDefault()?.Split(' ')[1].Split(' ')[0];
34+
var htmlCode = client.DownloadString(
35+
"https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver");
36+
var parser = new HtmlParser(Configuration.Default.WithDefaultLoader());
37+
var document = parser.Parse(htmlCode);
38+
var version = document
39+
.QuerySelectorAll("[class='driver-download'] p")
40+
.Select(element => element.TextContent)
41+
.FirstOrDefault()
42+
?.Split(' ')[1]
43+
.Split(' ')[0];
4044
return version;
4145
}
4246
}
4347

44-
public static string GetUrl()
48+
private static string GetUrl()
4549
{
4650
using (var client = new WebClient())
4751
{
48-
var doc = new HtmlDocument();
49-
var htmlCode =
50-
client.DownloadString("https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver");
51-
doc.LoadHtml(htmlCode);
52-
var itemList = doc.DocumentNode.SelectNodes("//*[@class='driver-download']/a")
53-
.Select(p => p.GetAttributeValue("href", null)).ToList();
54-
var url = itemList.FirstOrDefault();
52+
var htmlCode = client.DownloadString(
53+
"https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver");
54+
var parser = new HtmlParser(Configuration.Default.WithDefaultLoader());
55+
var document = parser.Parse(htmlCode);
56+
var url = document
57+
.QuerySelectorAll("[class='driver-download'] a")
58+
.Select(element => element.Attributes.GetNamedItem("href"))
59+
.FirstOrDefault()
60+
?.ToString();
5561
return url;
5662
}
5763
}

WebDriverManager/DriverConfigs/Impl/FirefoxConfig.cs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Linq;
22
using System.Net;
3-
using HtmlAgilityPack;
3+
using AngleSharp;
4+
using AngleSharp.Parser.Html;
45

56
namespace WebDriverManager.DriverConfigs.Impl
67
{
@@ -31,12 +32,14 @@ public string GetLatestVersion()
3132
{
3233
using (var client = new WebClient())
3334
{
34-
var doc = new HtmlDocument();
3535
var htmlCode = client.DownloadString("https://github.com/mozilla/geckodriver/releases");
36-
doc.LoadHtml(htmlCode);
37-
var itemList =
38-
doc.DocumentNode.SelectNodes("//*[@class='release-title']/a").Select(p => p.InnerText).ToList();
39-
var version = itemList.FirstOrDefault()?.Remove(0, 1);
36+
var parser = new HtmlParser(Configuration.Default.WithDefaultLoader());
37+
var document = parser.Parse(htmlCode);
38+
var version = document
39+
.QuerySelectorAll("[class='release-title'] a")
40+
.Select(element => element.TextContent)
41+
.FirstOrDefault()
42+
?.Remove(0, 1);
4043
return version;
4144
}
4245
}

WebDriverManager/DriverConfigs/Impl/IEConfig.cs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
using System.Linq;
22
using System.Net;
3-
using HtmlAgilityPack;
3+
using System.Text.RegularExpressions;
4+
using AngleSharp;
5+
using AngleSharp.Parser.Html;
46

57
namespace WebDriverManager.DriverConfigs.Impl
68
{
@@ -28,15 +30,20 @@ public string GetBinaryName()
2830

2931
public string GetLatestVersion()
3032
{
33+
var regex = new Regex(@"^\d+\.\d+\.\d+$");
3134
using (var client = new WebClient())
3235
{
33-
var doc = new HtmlDocument();
3436
var htmlCode = client.DownloadString("http://www.seleniumhq.org/download");
35-
doc.LoadHtml(htmlCode);
36-
var itemList = doc.DocumentNode.SelectNodes("(//div[@id='mainContent']/p)[7]")
37-
.Select(p => p.InnerText).ToList();
38-
var version = itemList.FirstOrDefault()?.Split(' ')[2];
39-
return version;
37+
var parser = new HtmlParser(Configuration.Default.WithDefaultLoader());
38+
var document = parser.Parse(htmlCode);
39+
var version = document
40+
.QuerySelectorAll("#mainContent > p:nth-child(10)")
41+
.Select(element => element.TextContent)
42+
.FirstOrDefault()
43+
?.Split(' ')[2];
44+
return version != null && regex.Match(version).Success
45+
? version
46+
: $"{version}.0";
4047
}
4148
}
4249
}

WebDriverManager/DriverConfigs/Impl/OperaConfig.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Linq;
22
using System.Net;
3-
using HtmlAgilityPack;
3+
using AngleSharp;
4+
using AngleSharp.Parser.Html;
45

56
namespace WebDriverManager.DriverConfigs.Impl
67
{
@@ -32,12 +33,13 @@ public string GetLatestVersion()
3233
{
3334
using (var client = new WebClient())
3435
{
35-
var doc = new HtmlDocument();
3636
var htmlCode = client.DownloadString("https://github.com/operasoftware/operachromiumdriver/releases");
37-
doc.LoadHtml(htmlCode);
38-
var itemList = doc.DocumentNode.SelectNodes("//*[@class='release-title']/a")
39-
.Select(p => p.InnerText).ToList();
40-
var version = itemList.FirstOrDefault();
37+
var parser = new HtmlParser(Configuration.Default.WithDefaultLoader());
38+
var document = parser.Parse(htmlCode);
39+
var version = document
40+
.QuerySelectorAll("[class='release-title'] a")
41+
.Select(element => element.TextContent)
42+
.FirstOrDefault();
4143
return version;
4244
}
4345
}

WebDriverManager/DriverConfigs/Impl/PhantomConfig.cs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Linq;
22
using System.Net;
3-
using HtmlAgilityPack;
3+
using AngleSharp;
4+
using AngleSharp.Parser.Html;
45

56
namespace WebDriverManager.DriverConfigs.Impl
67
{
@@ -30,14 +31,14 @@ public string GetLatestVersion()
3031
{
3132
using (var client = new WebClient())
3233
{
33-
var doc = new HtmlDocument();
3434
var htmlCode = client.DownloadString("https://bitbucket.org/ariya/phantomjs/downloads");
35-
doc.LoadHtml(htmlCode);
36-
var itemList =
37-
doc.DocumentNode.SelectNodes("//tr[@class='iterable-item']/td[@class='name']/a")
38-
.Select(p => p.InnerText)
39-
.ToList();
40-
var version = itemList.FirstOrDefault()?.Split('-')[1];
35+
var parser = new HtmlParser(Configuration.Default.WithDefaultLoader());
36+
var document = parser.Parse(htmlCode);
37+
var version = document
38+
.QuerySelectorAll("tr[class='iterable-item'] td[class='name'] a")
39+
.Select(element => element.TextContent)
40+
.FirstOrDefault()
41+
?.Split('-')[1];
4142
return version;
4243
}
4344
}

WebDriverManager/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,5 @@
3939
// by using the '*' as shown below:
4040
// [assembly: AssemblyVersion("1.0.*")]
4141

42-
[assembly: AssemblyVersion("2.0.0")]
43-
[assembly: AssemblyFileVersion("2.0.0")]
42+
[assembly: AssemblyVersion("2.0.1")]
43+
[assembly: AssemblyFileVersion("2.0.1")]

WebDriverManager/Services/Impl/BinaryService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ protected string UnZip(string path, string destination, string name)
4242
{
4343
if (entry.Name == name)
4444
{
45-
entry.ExtractToFile(destination);
45+
entry.ExtractToFile(destination, true);
4646
}
4747
}
4848
}

WebDriverManager/WebDriverManager.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@
3333
<WarningLevel>4</WarningLevel>
3434
</PropertyGroup>
3535
<ItemGroup>
36-
<Reference Include="HtmlAgilityPack, Version=1.4.9.5, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a">
37-
<HintPath>..\packages\HtmlAgilityPack.1.4.9.5\lib\Net45\HtmlAgilityPack.dll</HintPath>
36+
<Reference Include="AngleSharp, Version=0.9.9.0, Culture=neutral, PublicKeyToken=e83494dcdc6d31ea">
37+
<HintPath>..\packages\AngleSharp.0.9.9\lib\net45\AngleSharp.dll</HintPath>
3838
</Reference>
3939
<Reference Include="System" />
4040
<Reference Include="System.Core" />

0 commit comments

Comments
 (0)