If I need to check what’s going on with Network requests while Selenium C# tests are running, how to do it?
Sharing with you my solution.
I’ve developed a nice solution to capture Network requests. It works with currently latest version of Selenium Webdriver 2.33.0
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenQA.Selenium;
namespace MyNameSpace
{
public class BrowserNetworkMonitoringTool
{
private readonly NetworkManager manager;
public List<NetworkRequestSentEventArgs> Requests;
public List<NetworkResponseReceivedEventArgs> Responses;
public BrowserNetworkMonitoringTool(IWebDriver driver)
{
manager = new NetworkManager(driver);
Requests = new List<NetworkRequestSentEventArgs>();
Responses = new List<NetworkResponseReceivedEventArgs>();
}
public void StartMonitoring()
{
manager.NetworkResponseReceived += ResponseReceivedHandler;
manager.NetworkRequestSent += ManagerOnNetworkRequestSent;
var monitor = manager.StartMonitoring();
monitor.Wait();
}
private void ManagerOnNetworkRequestSent(object sender, NetworkRequestSentEventArgs e)
{
Requests.Add(e);
}
private void ResponseReceivedHandler(object sender, NetworkResponseReceivedEventArgs e)
{
Responses.Add(e);
}
public void StopMonitoring()
{
manager.StopMonitoring();
}
public void Clear()
{
Requests.Clear();
Responses.Clear();
}
}
}
Example of usage:
BrowserNetworkMonitoringTool networkMonitoringTool = new BrowserNetworkMonitoringTool(CurrentDriver);
networkMonitoringTool.StartMonitoring();
//Do any actions you need to do in your test here
networkMonitoringTool.StopMonitoring();
var allResponses = networkMonitoringTool.Responses;
foreach (var response in allResponses)
{
var unexpectedErrors = new List<string>();
if (response.ResponseStatusCode > 302)
{
unexpectedErrors.Add($"Response: {response.ResponseUrl} has response code: {response.ResponseStatusCode}");
}
if (unexpectedErrors.Any())
{
Assert.Fail($"Unexpected errors found: {string.Join(", ", unexpectedErrors)}");
}
}