Skip to content

Commit be8dc19

Browse files
authored
Feature/support edge chromium (#190)
+semver: feature * add edge chromium * hotfix for Should_BePossibleTo_ScrollWindowBy * remane some methods * removed webDriverVersion for edge * updated PackageReference * update comment * update chome version on azure
1 parent be6fa7b commit be8dc19

File tree

11 files changed

+157
-5
lines changed

11 files changed

+157
-5
lines changed

Aquality.Selenium/src/Aquality.Selenium/Aquality.Selenium.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
</ItemGroup>
6666

6767
<ItemGroup>
68+
<PackageReference Include="Microsoft.Edge.SeleniumTools" Version="3.141.1" />
6869
<PackageReference Include="Aquality.Selenium.Core" Version="1.1.1" />
6970
<PackageReference Include="WebDriverManager" Version="2.9.1" />
7071
</ItemGroup>

Aquality.Selenium/src/Aquality.Selenium/Browsers/Browser.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,7 @@ public enum BrowserName
383383
{
384384
Chrome,
385385
Edge,
386+
EdgeChromium,
386387
Firefox,
387388
IExplorer,
388389
Safari

Aquality.Selenium/src/Aquality.Selenium/Browsers/LocalBrowserFactory.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
using WebDriverManager.DriverConfigs;
1515
using WebDriverManager.DriverConfigs.Impl;
1616
using WebDriverManager.Helpers;
17+
using EdgeChromiumOptions = Microsoft.Edge.SeleniumTools.EdgeOptions;
18+
using EdgeChromiumService = Microsoft.Edge.SeleniumTools.EdgeDriverService;
19+
using EdgeChromiumDriver = Microsoft.Edge.SeleniumTools.EdgeDriver;
1720

1821
namespace Aquality.Selenium.Browsers
1922
{
@@ -59,6 +62,11 @@ private Browser CreateBrowser()
5962
driver = GetDriver<EdgeDriver>(EdgeDriverService.CreateDefaultService(),
6063
(EdgeOptions)driverSettings.DriverOptions, commandTimeout);
6164
break;
65+
case BrowserName.EdgeChromium:
66+
SetUpDriver(new EdgeConfig(), driverSettings);
67+
driver = GetDriver<EdgeChromiumDriver>(EdgeChromiumService.CreateChromiumService(),
68+
(EdgeChromiumOptions)driverSettings.DriverOptions, commandTimeout);
69+
break;
6270
case BrowserName.Safari:
6371
driver = GetDriver<SafariDriver>(SafariDriverService.CreateDefaultService(),
6472
(SafariOptions)driverSettings.DriverOptions, commandTimeout);
@@ -72,7 +80,7 @@ private Browser CreateBrowser()
7280

7381
private RemoteWebDriver GetDriver<T>(DriverService driverService, DriverOptions driverOptions, TimeSpan commandTimeout) where T : RemoteWebDriver
7482
{
75-
return AqualityServices.Get<IActionRetrier>().DoWithRetry(() =>
83+
return AqualityServices.Get<IActionRetrier>().DoWithRetry(() =>
7684
(T)Activator.CreateInstance(typeof(T), driverService, driverOptions, commandTimeout));
7785
}
7886

Aquality.Selenium/src/Aquality.Selenium/Configurations/BrowserProfile.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ public IDriverSettings DriverSettings
4545
return new InternetExplorerSettings(settingsFile);
4646
case BrowserName.Safari:
4747
return new SafariSettings(settingsFile);
48+
case BrowserName.EdgeChromium:
49+
return new EdgeChromiumSettings(settingsFile);
4850
default:
4951
throw new InvalidOperationException($"There is no assigned behaviour for retrieving DriverSettings for browser {BrowserName}");
5052
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
using System;
2+
using Aquality.Selenium.Browsers;
3+
using Aquality.Selenium.Core.Configurations;
4+
using Microsoft.Edge.SeleniumTools;
5+
using OpenQA.Selenium;
6+
7+
namespace Aquality.Selenium.Configurations.WebDriverSettings
8+
{
9+
/// <summary>
10+
/// Settings specific for Edge(chromium) web driver.
11+
/// </summary>
12+
public class EdgeChromiumSettings : DriverSettings
13+
{
14+
/// <summary>
15+
/// Instantiates class using JSON file with general settings
16+
/// </summary>
17+
/// <param name="settingsFile">JSON settings file.</param>
18+
public EdgeChromiumSettings(ISettingsFile settingsFile) : base(settingsFile)
19+
{
20+
}
21+
22+
protected override BrowserName BrowserName => BrowserName.EdgeChromium;
23+
24+
public override string DownloadDirCapabilityKey => "download.default_directory";
25+
26+
public override DriverOptions DriverOptions
27+
{
28+
get
29+
{
30+
var options = new EdgeOptions()
31+
{
32+
UseChromium = true
33+
};
34+
SetEdgeChromiumPrefs(options);
35+
SetCapabilities(options, (name, value) => options.AddAdditionalCapability(name, value, isGlobalCapability: true));
36+
SetEdgeChromiumArguments(options);
37+
SetPageLoadStratergy(options);
38+
return options;
39+
}
40+
}
41+
42+
private void SetEdgeChromiumPrefs(EdgeOptions options)
43+
{
44+
foreach (var option in BrowserOptions)
45+
{
46+
var value = option.Key == DownloadDirCapabilityKey ? DownloadDir : option.Value;
47+
options.AddUserProfilePreference(option.Key, value);
48+
}
49+
}
50+
51+
private void SetEdgeChromiumArguments(EdgeOptions options)
52+
{
53+
options.AddArguments(BrowserStartArguments);
54+
}
55+
}
56+
}

Aquality.Selenium/src/Aquality.Selenium/Resources/settings.json

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,28 @@
5959
"startArguments": []
6060
},
6161
"edge": {
62-
"webDriverVersion": "Latest",
6362
"systemArchitecture": "X32",
6463
"capabilities": {
6564
},
6665
"options": {
6766
},
6867
"startArguments": []
6968
},
69+
"edgechromium": {
70+
"webDriverVersion": "82.0.458.0",
71+
"capabilities": {
72+
"enableVNC": true
73+
},
74+
"options": {
75+
"intl.accept_languages": "en",
76+
"safebrowsing.enabled": "true",
77+
"profile.default_content_settings.popups": "0",
78+
"disable-popup-blocking": "true",
79+
"download.prompt_for_download": "false",
80+
"download.default_directory": "./downloads"
81+
},
82+
"startArguments": []
83+
},
7084
"safari": {
7185
"options": {
7286
"safari.options.dataDir": "/Users/username/Downloads"

Aquality.Selenium/tests/Aquality.Selenium.Tests/Integration/Actions/JsActionsTests.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,8 @@ public void Should_BePossibleTo_ScrollBy()
149149
homeDemoSiteForm.FirstScrollableExample.JsActions.ScrollBy(point.X, point.Y);
150150
var currentCoordinates = AqualityServices.Browser
151151
.ExecuteScriptFromFile<IList<object>>("Resources.GetScrollCoordinates.js",
152-
homeDemoSiteForm.FirstScrollableExample.GetElement()).Select(item => int.Parse(item.ToString()))
152+
homeDemoSiteForm.FirstScrollableExample.GetElement()).
153+
Select(item => (int)Math.Round(double.Parse(item.ToString())))
153154
.ToList();
154155
var actualPoint = new Point(currentCoordinates[0], currentCoordinates[1]);
155156
Assert.AreEqual(point, actualPoint, $"Current coordinates should be '{point}'");

Aquality.Selenium/tests/Aquality.Selenium.Tests/Integration/BrowserTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ public void Should_BePossibleTo_ScrollWindowBy()
195195
var initialY = sliderForm.FormPointInViewPort.Y;
196196
var formHeight = sliderForm.Size.Height;
197197
browser.ScrollWindowBy(0, formHeight);
198-
Assert.AreEqual(formHeight, initialY - sliderForm.FormPointInViewPort.Y);
198+
Assert.LessOrEqual(Math.Abs(formHeight - (initialY - sliderForm.FormPointInViewPort.Y)), 1, "Window should be scrolled.");
199199
}
200200

201201
[Test]

Aquality.Selenium/tests/Aquality.Selenium.Tests/Resources/settings.azure.json

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
"driverSettings": {
88
"chrome": {
9-
"webDriverVersion": "80.0.3987.106",
9+
"webDriverVersion": "83.0.4103.39",
1010
"capabilities": {
1111
"enableVNC": true
1212
},
@@ -52,6 +52,29 @@
5252
"options": {},
5353
"startArguments": []
5454
},
55+
"edge": {
56+
"systemArchitecture": "X64",
57+
"capabilities": {
58+
},
59+
"options": {
60+
},
61+
"startArguments": []
62+
},
63+
"edgechromium": {
64+
"webDriverVersion": "82.0.458.0",
65+
"capabilities": {
66+
"enableVNC": true
67+
},
68+
"options": {
69+
"intl.accept_languages": "en",
70+
"safebrowsing.enabled": "true",
71+
"profile.default_content_settings.popups": "0",
72+
"disable-popup-blocking": "true",
73+
"download.prompt_for_download": "false",
74+
"download.default_directory": "./downloads"
75+
},
76+
"startArguments": []
77+
},
5578
"safari": {
5679
"options": {
5780
"safari.options.dataDir": "/Users/username/Downloads"

Aquality.Selenium/tests/Aquality.Selenium.Tests/Resources/settings.json

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,29 @@
5252
"elementScrollBehavior": 2
5353
}
5454
},
55+
"edge": {
56+
"systemArchitecture": "X64",
57+
"capabilities": {
58+
},
59+
"options": {
60+
},
61+
"startArguments": []
62+
},
63+
"edgechromium": {
64+
"webDriverVersion": "82.0.458.0",
65+
"capabilities": {
66+
"enableVNC": true
67+
},
68+
"options": {
69+
"intl.accept_languages": "en",
70+
"safebrowsing.enabled": "true",
71+
"profile.default_content_settings.popups": "0",
72+
"disable-popup-blocking": "true",
73+
"download.prompt_for_download": "false",
74+
"download.default_directory": "./downloads"
75+
},
76+
"startArguments": []
77+
},
5578
"safari": {
5679
"options": {
5780
"safari.options.dataDir": "/Users/username/Downloads"

0 commit comments

Comments
 (0)