5

I am using devTools in selenium 4 to retrieve the responses from the network tab.

While I am getting the url, response code, headers etc,

I could not find a way to retrieve the actual response body. (My intention is to validate the key value pairs in the response.)

Any help is much appreciated.

Below is a snippet from my code.

   devTools.addListener(Network.responseReceived(),
            response -> {
                Response res= response.getResponse();
                System.out.println("URL - " + res.getUrl());
                System.out.println("Status - " + res.getStatus());
                System.out.println("Headers - " + res.getHeaders());
                System.out.println("Header text - " + res.getHeadersText());
            });
skv
  • 149
  • 2
  • 3
  • 15

2 Answers2

2
            devTools = ((ChromeDriver) driver).getDevTools();
            devTools.createSession();
            devTools.send(Network.clearBrowserCache());
            devTools.send(Network.setCacheDisabled(true));

            final RequestId[] requestIds = new RequestId[1];
            devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.of(100000000)));
            devTools.addListener(Network.responseReceived(), responseReceived -> {
                

                requestIds[0] = responseReceived.getRequestId();
                String url = responseReceived.getResponse().getUrl();

                int status = responseReceived.getResponse().getStatus();
                String type = responseReceived.getType().toJson();
                String headers = responseReceived.getResponse().getHeaders().toString();

                String  responseBody = devTools.send(Network.getResponseBody(requestIds[0])).getBody();
CCC
  • 170
  • 1
  • 15
  • Did this solution work? I am looking for exactly the same thing. – tarekahf Feb 07 '22 at 17:48
  • It worked for me, it creates another thread and starts logging on its own. I never tried it because we switched to Tosca – CCC Feb 08 '22 at 18:54
  • 1
    What language did you use? Java or C#? Do you know if C# will work? It seems Java and C# implementations are different to the extent that it makes me doubt it will work with C#. – tarekahf Feb 08 '22 at 20:15
  • I used java. I don't know how to do it in other languages – CCC Feb 09 '22 at 21:07
0

C# won't get the body using DevToolsSession, but you can use the driver.Manage().Network to get it, something like this:

_intercept = _driver.Manage().Network;

await _intercept.StartMonitoring();

_intercept.NetworkRequestSent += _intercept_NetworkRequestSent;
_intercept.NetworkResponseReceived += _intercept_NetworkResponseReceived;

private void _intercept_NetworkResponseReceived(object? sender, NetworkResponseReceivedEventArgs e)
{
    Console.WriteLine(e.ResponseBody);
}