Skip to content

Commit 123b866

Browse files
authored
[BiDi] Network handling (#210) +semver: feature
* [BiDi] Network handling +semver: feature * Add localization resources, removed duplicated tests, fix code smells * Add docs to Network property * Add example to README.md * Fix localization manager tests * Rework failed tests * Try to stabilize HiddenElementsTests
1 parent f76edbc commit 123b866

24 files changed

+623
-183
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868
</ItemGroup>
6969

7070
<ItemGroup>
71-
<PackageReference Include="Aquality.Selenium.Core" Version="2.0.0" />
71+
<PackageReference Include="Aquality.Selenium.Core" Version="2.0.1" />
7272
<PackageReference Include="WebDriverManager" Version="2.12.3" />
7373
</ItemGroup>
7474

Aquality.Selenium/src/Aquality.Selenium/Aquality.Selenium.xml

Lines changed: 89 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public class Browser : IApplication
2929
public Browser(WebDriver webDriver)
3030
{
3131
Driver = webDriver;
32+
Network = new NetworkHandling(webDriver);
3233
Logger = AqualityServices.LocalizedLogger;
3334
LocalizationManager = AqualityServices.Get<ILocalizationManager>();
3435
browserProfile = AqualityServices.Get<IBrowserProfile>();
@@ -49,6 +50,11 @@ public Browser(WebDriver webDriver)
4950
/// <value>Instance of Selenium WebDriver for desired web browser.</value>
5051
public WebDriver Driver { get; }
5152

53+
/// <summary>
54+
/// Provides Network Handling functionality <see cref="NetworkHandling"/>
55+
/// </summary>
56+
public INetwork Network { get; }
57+
5258
/// <summary>
5359
/// Gets name of desired browser from configuration.
5460
/// </summary>
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using OpenQA.Selenium;
2+
using System.Threading.Tasks;
3+
4+
namespace Aquality.Selenium.Browsers
5+
{
6+
public static class BrowserNetworkExtensions
7+
{
8+
/// <summary>
9+
/// Registers authentication handler and awaits to start network monitoring.
10+
/// </summary>
11+
/// <param name="browser">Browser instance.</param>
12+
/// <param name="hostPart">Part of the host name for URI matcher.</param>
13+
/// <param name="username">Username for authentication.</param>
14+
/// <param name="password">Password for authentication.</param>
15+
/// <returns>A task to be awaited.</returns>
16+
public static async Task RegisterBasicAuthenticationAndStartMonitoring(this Browser browser, string hostPart, string username, string password)
17+
{
18+
var handler = new NetworkAuthenticationHandler
19+
{
20+
UriMatcher = (uri) => uri.Host.Contains(hostPart),
21+
Credentials = new PasswordCredentials(username, password)
22+
};
23+
await RegisterBasicAuthenticationAndStartMonitoring(browser, handler);
24+
}
25+
26+
/// <summary>
27+
/// Registers authentication handler and awaits to start network monitoring.
28+
/// </summary>
29+
/// <param name="browser">Browser instance.</param>
30+
/// <param name="handler">Authentication parameters, such as URI matcher and credentials.</param>
31+
/// <returns>A task to be awaited.</returns>
32+
public static async Task RegisterBasicAuthenticationAndStartMonitoring(this Browser browser, NetworkAuthenticationHandler handler)
33+
{
34+
var networkHandling = browser.Network;
35+
networkHandling.AddAuthenticationHandler(handler);
36+
await networkHandling.StartMonitoring();
37+
}
38+
}
39+
}
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
using Aquality.Selenium.Core.Localization;
2+
using OpenQA.Selenium;
3+
using System;
4+
using System.Threading.Tasks;
5+
6+
namespace Aquality.Selenium.Browsers
7+
{
8+
/// <summary>
9+
/// Wrap over implementation of Selenium WebDriver INetwork.
10+
/// </summary>
11+
public class NetworkHandling : INetwork
12+
{
13+
private readonly INetwork network;
14+
15+
/// <summary>
16+
/// Initializes a new instance of the <see cref="NetworkHandling"/> class.
17+
/// </summary>
18+
/// <param name="driver">The <see cref="IWebDriver"/> instance on which the network should be monitored.</param>
19+
public NetworkHandling(WebDriver driver)
20+
{
21+
network = driver.Manage().Network;
22+
}
23+
24+
private ILocalizedLogger Logger => AqualityServices.LocalizedLogger;
25+
26+
/// <summary>
27+
/// A network request sent event.
28+
/// </summary>
29+
public event EventHandler<NetworkRequestSentEventArgs> NetworkRequestSent
30+
{
31+
add
32+
{
33+
Logger.Info("loc.browser.network.event.requestsent.add");
34+
network.NetworkRequestSent += value;
35+
}
36+
remove
37+
{
38+
Logger.Info("loc.browser.network.event.requestsent.remove");
39+
network.NetworkRequestSent -= value;
40+
}
41+
}
42+
43+
/// <summary>
44+
/// A network response received event.
45+
/// </summary>
46+
public event EventHandler<NetworkResponseReceivedEventArgs> NetworkResponseReceived
47+
{
48+
add
49+
{
50+
Logger.Info("loc.browser.network.event.responsereceived.add");
51+
network.NetworkResponseReceived += value;
52+
}
53+
remove
54+
{
55+
Logger.Info("loc.browser.network.event.responsereceived.remove");
56+
network.NetworkResponseReceived -= value;
57+
}
58+
}
59+
60+
/// <summary>
61+
/// Add basic authentication handler.
62+
/// </summary>
63+
/// <param name="handler">Authentication parameters, such as URI matcher and credentials.</param>
64+
public void AddAuthenticationHandler(NetworkAuthenticationHandler handler)
65+
{
66+
Logger.Info("loc.browser.network.handler.authentication.add");
67+
network.AddAuthenticationHandler(handler);
68+
}
69+
70+
/// <summary>
71+
/// Add request handler.
72+
/// </summary>
73+
/// <param name="handler">Handler parameters: request matcher, request transformer and response supplier.</param>
74+
public void AddRequestHandler(NetworkRequestHandler handler)
75+
{
76+
Logger.Info("loc.browser.network.handler.request.add");
77+
network.AddRequestHandler(handler);
78+
}
79+
80+
/// <summary>
81+
/// Add response handler.
82+
/// </summary>
83+
/// <param name="handler">Handler parameters: response matcher and transformer.</param>
84+
public void AddResponseHandler(NetworkResponseHandler handler)
85+
{
86+
Logger.Info("loc.browser.network.handler.response.add");
87+
network.AddResponseHandler(handler);
88+
}
89+
90+
/// <summary>
91+
/// Clear basic authentication handlers.
92+
/// </summary>
93+
public void ClearAuthenticationHandlers()
94+
{
95+
Logger.Info("loc.browser.network.handler.authentication.clear");
96+
network.ClearAuthenticationHandlers();
97+
}
98+
99+
/// <summary>
100+
/// Clear request handlers.
101+
/// </summary>
102+
public void ClearRequestHandlers()
103+
{
104+
Logger.Info("loc.browser.network.handler.request.clear");
105+
network.ClearRequestHandlers();
106+
}
107+
108+
/// <summary>
109+
/// Clear response handlers.
110+
/// </summary>
111+
public void ClearResponseHandlers()
112+
{
113+
Logger.Info("loc.browser.network.handler.response.clear");
114+
network.ClearResponseHandlers();
115+
}
116+
117+
/// <summary>
118+
/// Awaits to start network monitoring.
119+
/// </summary>
120+
/// <returns>A task to be awaited.</returns>
121+
public async Task StartMonitoring()
122+
{
123+
Logger.Info("loc.browser.network.monitoring.start");
124+
await network.StartMonitoring();
125+
}
126+
127+
/// <summary>
128+
/// Awaits to stop network monitoring.
129+
/// </summary>
130+
/// <returns>A task to be awaited.</returns>
131+
public async Task StopMonitoring()
132+
{
133+
Logger.Info("loc.browser.network.monitoring.stop");
134+
await network.StopMonitoring();
135+
}
136+
}
137+
}

Aquality.Selenium/src/Aquality.Selenium/Resources/Localization/be.json

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,5 +72,17 @@
7272
"loc.browser.get.tab.handles": "Атрыманне спісу дэскрыптараў адкрытых укладак",
7373
"loc.browser.get.tab.handle": "Атрыманне дэскрыптара бягучай укладкі",
7474
"loc.browser.tab.open.new": "Адкрыццё новай укладкі",
75-
"loc.browser.tab.close": "Закрыццё ўкладкі"
75+
"loc.browser.tab.close": "Закрыццё ўкладкі",
76+
"loc.browser.network.event.requestsent.add": "Падпісваемся на падзею адпраўкі сеткавага запыта",
77+
"loc.browser.network.event.requestsent.remove": "Адпісваемся ад падзеі адпраўкі сеткавага запыта",
78+
"loc.browser.network.event.responsereceived.add": "Падпісваемся на падзею атрымання сеткавага адказа",
79+
"loc.browser.network.event.responsereceived.remove": "Адпісваемся ад падзеі атрымання сеткавага адказа",
80+
"loc.browser.network.handler.authentication.add": "Дадаем апрацоўшчык базавай аўтэнтыфікацыі",
81+
"loc.browser.network.handler.authentication.clear": "Ачышчаем апрацоўшчыкі базавай аўтэнтыфікацыі",
82+
"loc.browser.network.handler.request.add": "Дадаем апрацоўшчык сеткавых запытаў",
83+
"loc.browser.network.handler.request.clear": "Ачышчаем апрацоўшчыкі сеткавых запытаў",
84+
"loc.browser.network.handler.response.add": "Дадаем апрацоўшчык сеткавых адказаў",
85+
"loc.browser.network.handler.response.clear": "Ачышчаем апрацоўшчыкі сеткавых адказаў",
86+
"loc.browser.network.monitoring.start": "Пачынаем сеткавы маніторынг",
87+
"loc.browser.network.monitoring.stop": "Спыняем сеткавы маніторынг"
7688
}

Aquality.Selenium/src/Aquality.Selenium/Resources/Localization/en.json

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55
"loc.browser.capabilities": "Got browser capabilities from settings file: {0}",
66
"loc.browser.options": "Got browser profile options from settings file: {0}",
77
"loc.browser.driver.quit": "Closing browser",
8-
"loc.browser.getUrl": "Getting current url",
9-
"loc.browser.url.value": "Current url: [{0}]",
10-
"loc.browser.grid": "Setting webdriver from selenium grid hub",
8+
"loc.browser.getUrl": "Getting current URL",
9+
"loc.browser.url.value": "Current URL: [{0}]",
10+
"loc.browser.grid": "Setting WebDriver from selenium grid hub",
1111
"loc.browser.grid.fail": "Driver setting from Selenium Grid hub was failed",
1212
"loc.browser.maximize": "Maximizing browser window",
13-
"loc.browser.navigate": "Navigate to url - '{0}'",
13+
"loc.browser.navigate": "Navigate to URL - '{0}'",
1414
"loc.browser.page.wait": "Waiting for page to load",
1515
"loc.browser.page.timeout": "Page loading timed out",
1616
"loc.browser.ready": "Browser '{0}' ready...",
@@ -24,7 +24,7 @@
2424
"loc.checkable.state": "State: [{0}]",
2525
"loc.clicking": "Clicking",
2626
"loc.clicking.double": "Clicking double",
27-
"loc.clicking.js": "Clicking via Javascript",
27+
"loc.clicking.js": "Clicking via JavaScript",
2828
"loc.clicking.right": "Clicking right",
2929
"loc.combobox": "ComboBox",
3030
"loc.combobox.getting.selected.text": "Getting selected text",
@@ -45,7 +45,7 @@
4545
"loc.focusing": "Focusing",
4646
"loc.get.text": "Getting text from element",
4747
"loc.text.value": "Element's text: [{0}]",
48-
"loc.get.text.js": "Getting text from element via Javascript",
48+
"loc.get.text.js": "Getting text from element via JavaScript",
4949
"loc.hover.js": "Hover mouse over element via JavaScript",
5050
"loc.is.present.js": "Is present via JavaScript",
5151
"loc.is.present.value": "Is present on screen: [{0}]",
@@ -72,5 +72,17 @@
7272
"loc.browser.get.tab.handles": "Getting tab handles",
7373
"loc.browser.get.tab.handle": "Getting current tab handle",
7474
"loc.browser.tab.open.new": "Opening new tab",
75-
"loc.browser.tab.close": "Closing tab"
75+
"loc.browser.tab.close": "Closing tab",
76+
"loc.browser.network.event.requestsent.add": "Subscribing to Network Request Sent event",
77+
"loc.browser.network.event.requestsent.remove": "Unsubscribing from Network Request Sent event",
78+
"loc.browser.network.event.responsereceived.add": "Subscribing to Network Response Received event",
79+
"loc.browser.network.event.responsereceived.remove": "Unsubscribing from Network Response Received event",
80+
"loc.browser.network.handler.authentication.add": "Adding Basic Authentication handler",
81+
"loc.browser.network.handler.authentication.clear": "Clearing Basic Authentication handlers",
82+
"loc.browser.network.handler.request.add": "Adding Network Request handler",
83+
"loc.browser.network.handler.request.clear": "Clearing Network Request handlers",
84+
"loc.browser.network.handler.response.add": "Adding Network Response handler",
85+
"loc.browser.network.handler.response.clear": "Clearing Network Response handler",
86+
"loc.browser.network.monitoring.start": "Starting Network Monitoring",
87+
"loc.browser.network.monitoring.stop": "Stopping Network Monitoring"
7688
}

0 commit comments

Comments
 (0)