Tune in for the Selenium Community Live scheduled for April 25th, 2025.
Join us!
Chrome DevTools Network Features
Network features using CDP.
While Selenium 4 provides direct access to the Chrome DevTools Protocol, these
methods will eventually be removed when WebDriver BiDi implemented.
Basic authentication
Some applications make use of browser authentication to secure pages.
It used to be common to handle them in the URL, but browsers stopped supporting this.
With this code you can insert the credentials into the header when necessary
importcom.google.common.net.MediaType;importdev.selenium.BaseTest;importjava.net.;importjava.time.Duration;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.Objects;importjava.util.Optional;importjava.util.concurrent.CopyOnWriteArrayList;importjava.util.concurrent.atomic.AtomicBoolean;importjava.util.function.Predicate;importjava.util.function.Supplier;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.BeforeEach;importorg.junit.jupiter.api.Test;importorg.openqa.selenium.;importorg.openqa.selenium.chrome.ChromeDriver;importorg.openqa.selenium.devtools.DevTools;importorg.openqa.selenium.devtools.HasDevTools;importorg.openqa.selenium.devtools.NetworkInterceptor;importorg.openqa.selenium.devtools.v134.browser.Browser;importorg.openqa.selenium.devtools.v134.network.Network;importorg.openqa.selenium.devtools.v134.performance.Performance;importorg.openqa.selenium.devtools.v134.performance.model.Metric;importorg.openqa.selenium.remote.http.*;importorg.openqa.selenium.support.ui.WebDriverWait;publicclassNetworkTestextendsBaseTest{@BeforeEachpublicvoidcreateSession(){driver=newChromeDriver();wait=newWebDriverWait(driver,Duration.ofSeconds(10));}@TestpublicvoidbasicAuthentication(){Predicate<URI>uriPredicate=uri->uri.toString().contains("herokuapp.com");Supplier<Credentials>authentication=UsernameAndPassword.of("admin","admin");((HasAuthentication)driver).register(uriPredicate,authentication);driver.get("https://the-internet.herokuapp.com/basic_auth");StringsuccessMessage="Congratulations! You must have the proper credentials.";WebElementelementMessage=driver.findElement(By.tagName("p"));Assertions.assertEquals(successMessage,elementMessage.getText());}@TestpublicvoidrecordResponse(){CopyOnWriteArrayList<String>contentType=newCopyOnWriteArrayList<>();try(NetworkInterceptorignored=newNetworkInterceptor(driver,(Filter)next->req->{HttpResponseres=next.execute(req);contentType.add(res.getHeader("Content-Type"));returnres;})){driver.get("https://www.selenium.dev/selenium/web/blank.html");wait.until(_d->contentType.size()>1);}Assertions.assertEquals("text/html; charset=utf-8",contentType.get(0));}@TestpublicvoidtransformResponses(){try(NetworkInterceptorignored=newNetworkInterceptor(driver,Route.matching(req->true).to(()->req->newHttpResponse().setStatus(200).addHeader("Content-Type",MediaType.HTML_UTF_8.toString()).setContent(Contents.utf8String("Creamy, delicious cheese!"))))){driver.get("https://www.selenium.dev/selenium/web/blank.html");}WebElementbody=driver.findElement(By.tagName("body"));Assertions.assertEquals("Creamy, delicious cheese!",body.getText());}@TestpublicvoidinterceptRequests(){AtomicBooleancompleted=newAtomicBoolean(false);try(NetworkInterceptorignored=newNetworkInterceptor(driver,(Filter)next->req->{if(req.getUri().contains("one.js")){req=newHttpRequest(HttpMethod.GET,req.getUri().replace("one.js","two.js"));}completed.set(true);returnnext.execute(req);})){driver.get("https://www.selenium.dev/selenium/web/devToolsRequestInterceptionTest.html");driver.findElement(By.tagName("button")).click();}Assertions.assertEquals("two",driver.findElement(By.id("result")).getText());}@TestpublicvoidperformanceMetrics(){driver.get("https://www.selenium.dev/selenium/web/frameset.html");DevToolsdevTools=((HasDevTools)driver).getDevTools();devTools.createSession();devTools.send(Performance.enable(Optional.empty()));List<Metric>metricList=devTools.send(Performance.getMetrics());Map<String,Number>metrics=newHashMap<>();for(Metricmetric:metricList){metrics.put(metric.getName(),metric.getValue());}Assertions.assertTrue(metrics.get("DevToolsCommandDuration").doubleValue()>0);Assertions.assertEquals(12,metrics.get("Frames").intValue());}@TestpublicvoidsetCookie(){DevToolsdevTools=((HasDevTools)driver).getDevTools();devTools.createSession();devTools.send(Network.setCookie("cheese","gouda",Optional.empty(),Optional.of("www.selenium.dev"),Optional.empty(),Optional.of(true),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty()));driver.get("https://www.selenium.dev");Cookiecheese=driver.manage().getCookieNamed("cheese");Assertions.assertEquals("gouda",cheese.getValue());}@TestpublicvoidwaitForDownload(){driver.get("https://www.selenium.dev/selenium/web/downloads/download.html");DevToolsdevTools=((HasDevTools)driver).getDevTools();devTools.createSession();devTools.send(Browser.setDownloadBehavior(Browser.SetDownloadBehaviorBehavior.ALLOWANDNAME,Optional.empty(),Optional.of(""),Optional.of(true)));AtomicBooleancompleted=newAtomicBoolean(false);devTools.addListener(Browser.downloadProgress(),e->completed.set(Objects.equals(e.getState().toString(),"completed")));driver.findElement(By.id("file-2")).click();Assertions.assertDoesNotThrow(()->wait.until(_d->completed));}}
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L41-L43" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
importpytestfromselenium.webdriver.common.byimportByfromselenium.webdriver.common.devtools.v134.networkimportHeaders@pytest.mark.trioasyncdeftest_basic_auth(driver):asyncwithdriver.bidi_connection()asconnection:awaitconnection.session.execute(connection.devtools.network.enable())credentials=base64.b64encode("admin:admin".encode()).decode()auth={'authorization':'Basic '+credentials}awaitconnection.session.execute(connection.devtools.network.set_extra_http_headers(Headers(auth)))driver.get('https://the-internet.herokuapp.com/basic_auth')success=driver.find_element(by=By.TAG_NAME,value='p')assertsuccess.text=='Congratulations! You must have the proper credentials.'@pytest.mark.trioasyncdeftest_performance(driver):driver.get('https://www.selenium.dev/selenium/web/frameset.html')asyncwithdriver.bidi_connection()asconnection:awaitconnection.session.execute(connection.devtools.performance.enable())metric_list=awaitconnection.session.execute(connection.devtools.performance.get_metrics())metrics={metric.name:metric.valueformetricinmetric_list}assertmetrics["DevToolsCommandDuration"]>0assertmetrics["Frames"]==12@pytest.mark.trioasyncdeftest_set_cookie(driver):asyncwithdriver.bidi_connection()asconnection:execution=connection.devtools.network.set_cookie(name="cheese",value="gouda",domain="www.selenium.dev",secure=True)awaitconnection.session.execute(execution)driver.get("https://www.selenium.dev")cheese=driver.get_cookie("cheese")assertcheese["value"]=="gouda"
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/python/tests/bidi/cdp/test_network.py#L13-15" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
usingSystem.Threading.Tasks;usingMicrosoft.VisualStudio.TestTools.UnitTesting;usingOpenQA.Selenium;usingOpenQA.Selenium.DevTools;usingSystem.Linq;usingOpenQA.Selenium.DevTools.V132.Network;usingOpenQA.Selenium.DevTools.V132.Performance;namespaceSeleniumDocs.BiDi.CDP{[TestClass]publicclassNetworkTest:BaseTest{[TestInitialize]publicvoidStartup(){StartDriver("132");}[TestMethod]publicasyncTaskBasicAuthentication(){varhandler=newNetworkAuthenticationHandler(){UriMatcher=uri=>uri.AbsoluteUri.Contains("herokuapp"),Credentials=newPasswordCredentials("admin","admin")};varnetworkInterceptor=driver.Manage().Network;networkInterceptor.AddAuthenticationHandler(handler);awaitnetworkInterceptor.StartMonitoring();driver.Navigate().GoToUrl("https://the-internet.herokuapp.com/basic_auth");awaitnetworkInterceptor.StopMonitoring();Assert.AreEqual("Congratulations! You must have the proper credentials.",driver.FindElement(By.TagName("p")).Text);}[TestMethod]publicasyncTaskRecordNetworkResponse(){varcontentType=newList<string>();INetworknetworkInterceptor=driver.Manage().Network;networkInterceptor.NetworkResponseReceived+=(,e)=>{contentType.Add(e.ResponseHeaders["content-type"]);};awaitnetworkInterceptor.StartMonitoring();driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/blank.html");awaitnetworkInterceptor.StopMonitoring();Assert.AreEqual("text/html; charset=utf-8",contentType[0]);}[TestMethod]publicasyncTaskTransformNetworkResponse(){varhandler=newNetworkResponseHandler(){ResponseMatcher==>true,ResponseTransformer=_=>newHttpResponseData{StatusCode=200,Body="Creamy, delicious cheese!"}};INetworknetworkInterceptor=driver.Manage().Network;networkInterceptor.AddResponseHandler(handler);awaitnetworkInterceptor.StartMonitoring();driver.Navigate().GoToUrl("https://www.selenium.dev");awaitnetworkInterceptor.StopMonitoring();varbody=driver.FindElement(By.TagName("body"));Assert.AreEqual("Creamy, delicious cheese!",body.Text);}[TestMethod]publicasyncTaskTransformNetworkRequest(){varhandler=newNetworkRequestHandler{RequestMatcher=request=>request.Url.Contains("one.js"),RequestTransformer=request=>{request.Url=request.Url.Replace("one","two");returnrequest;}};INetworknetworkInterceptor=driver.Manage().Network;networkInterceptor.AddRequestHandler(handler);awaitnetworkInterceptor.StartMonitoring();driver.Url="https://www.selenium.dev/selenium/web/devToolsRequestInterceptionTest.html";driver.FindElement(By.TagName("button")).Click();awaitnetworkInterceptor.StopMonitoring();Assert.AreEqual("two",driver.FindElement(By.Id("result")).Text);}[TestMethod]publicasyncTaskPerformanceMetrics(){driver.Url="https://www.selenium.dev/selenium/web/frameset.html";varsession=((IDevTools)driver).GetDevToolsSession();vardomains=session.GetVersionSpecificDomains<OpenQA.Selenium.DevTools.V132.DevToolsSessionDomains>();awaitdomains.Performance.Enable(newOpenQA.Selenium.DevTools.V132.Performance.EnableCommandSettings());varmetricsResponse=awaitsession.SendCommand<GetMetricsCommandSettings,GetMetricsCommandResponse>(newGetMetricsCommandSettings());varmetrics=metricsResponse.Metrics.ToDictionary(dict=>dict.Name,dict=>dict.Value);Assert.IsTrue(metrics["DevToolsCommandDuration"]>0);Assert.AreEqual(12,metrics["Frames"]);}[TestMethod]publicasyncTaskSetCookie(){varsession=((IDevTools)driver).GetDevToolsSession();vardomains=session.GetVersionSpecificDomains<OpenQA.Selenium.DevTools.V132.DevToolsSessionDomains>();awaitdomains.Network.Enable(newOpenQA.Selenium.DevTools.V132.Network.EnableCommandSettings());varcookieCommandSettings=newSetCookieCommandSettings{Name="cheese",Value="gouda",Domain="www.selenium.dev",Secure=true};awaitdomains.Network.SetCookie(cookieCommandSettings);driver.Url="https://www.selenium.dev";OpenQA.Selenium.Cookiecheese=driver.Manage().Cookies.GetCookieNamed("cheese");Assert.AreEqual("gouda",cheese.Value);}}}
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L25-L32" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
require'spec_helper'RSpec.describe'Network'dolet(:driver){start_session}it'does basic authentication'dodriver.register(username:'admin',password:'admin',uri:/herokuapp/)driver.get('https://the-internet.herokuapp.com/basic_auth')expect(driver.find_element(tag_name:'p').text).toeq('Congratulations! You must have the proper credentials.')endit'records network response'docontent_type=[]driver.interceptdo|request,&continue|continue.call(request)do|response|content_type<<response.headers['content-type']endenddriver.get('https://www.selenium.dev/selenium/web/blank.html')expect(content_type.first).toeq('text/html; charset=utf-8')endit'transforms network response'dodriver.interceptdo|request,&continue|continue.call(request)do|response|response.body='Creamy, delicious cheese!'ifrequest.url.include?('blank')endenddriver.get('https://www.selenium.dev/selenium/web/blank.html')expect(driver.find_element(tag_name:'body').text).toeq('Creamy, delicious cheese!')endit'intercepts network request'dodriver.interceptdo|request,&continue|uri=URI(request.url)request.url=uri.to_s.gsub('one','two')ifuri.path&.end_with?('one.js')continue.call(request)enddriver.get('https://www.selenium.dev/selenium/web/devToolsRequestInterceptionTest.html')driver.find_element(tag_name:'button').clickexpect(driver.find_element(id:'result').text).toeq('two')endit'gets performance metrics'dodriver.get('https://www.selenium.dev/selenium/web/frameset.html')driver.devtools.performance.enablemetric_list=driver.devtools.performance.get_metrics.dig('result','metrics')metrics=metric_list.each_with_object({})do|metric,hash|hash[metric['name']]=metric['value']endexpect(metrics['DevToolsCommandDuration']).tobe>0expect(metrics['Frames']).toeq12endit'sets cookie'dodriver.devtools.network.set_cookie(name:'cheese',value:'gouda',domain:'www.selenium.dev',secure:true)driver.get('https://www.selenium.dev')cheese=driver.manage.cookie_named('cheese')expect(cheese[:value]).toeq'gouda'endit'waits for downloads',except:{platform::windows}dodriver.get('https://www.selenium.dev/selenium/web/downloads/download.html')driver.devtools.browser.set_download_behavior(behavior:'allow',download_path:'',events_enabled:true)driver.devtools.browser.on(:download_progress)do|progress|@completed=progress['state']=='completed'enddriver.find_element(id:'file-2').clickexpect{Selenium::WebDriver::Wait.new.until{@completed}}.not_toraise_exceptionendend
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/ruby/spec/bidi/cdp/network_spec.rb#L9-L11" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
importcom.google.common.net.MediaType;importdev.selenium.BaseTest;importjava.net.;importjava.time.Duration;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.Objects;importjava.util.Optional;importjava.util.concurrent.CopyOnWriteArrayList;importjava.util.concurrent.atomic.AtomicBoolean;importjava.util.function.Predicate;importjava.util.function.Supplier;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.BeforeEach;importorg.junit.jupiter.api.Test;importorg.openqa.selenium.;importorg.openqa.selenium.chrome.ChromeDriver;importorg.openqa.selenium.devtools.DevTools;importorg.openqa.selenium.devtools.HasDevTools;importorg.openqa.selenium.devtools.NetworkInterceptor;importorg.openqa.selenium.devtools.v134.browser.Browser;importorg.openqa.selenium.devtools.v134.network.Network;importorg.openqa.selenium.devtools.v134.performance.Performance;importorg.openqa.selenium.devtools.v134.performance.model.Metric;importorg.openqa.selenium.remote.http.*;importorg.openqa.selenium.support.ui.WebDriverWait;publicclassNetworkTestextendsBaseTest{@BeforeEachpublicvoidcreateSession(){driver=newChromeDriver();wait=newWebDriverWait(driver,Duration.ofSeconds(10));}@TestpublicvoidbasicAuthentication(){Predicate<URI>uriPredicate=uri->uri.toString().contains("herokuapp.com");Supplier<Credentials>authentication=UsernameAndPassword.of("admin","admin");((HasAuthentication)driver).register(uriPredicate,authentication);driver.get("https://the-internet.herokuapp.com/basic_auth");StringsuccessMessage="Congratulations! You must have the proper credentials.";WebElementelementMessage=driver.findElement(By.tagName("p"));Assertions.assertEquals(successMessage,elementMessage.getText());}@TestpublicvoidrecordResponse(){CopyOnWriteArrayList<String>contentType=newCopyOnWriteArrayList<>();try(NetworkInterceptorignored=newNetworkInterceptor(driver,(Filter)next->req->{HttpResponseres=next.execute(req);contentType.add(res.getHeader("Content-Type"));returnres;})){driver.get("https://www.selenium.dev/selenium/web/blank.html");wait.until(_d->contentType.size()>1);}Assertions.assertEquals("text/html; charset=utf-8",contentType.get(0));}@TestpublicvoidtransformResponses(){try(NetworkInterceptorignored=newNetworkInterceptor(driver,Route.matching(req->true).to(()->req->newHttpResponse().setStatus(200).addHeader("Content-Type",MediaType.HTML_UTF_8.toString()).setContent(Contents.utf8String("Creamy, delicious cheese!"))))){driver.get("https://www.selenium.dev/selenium/web/blank.html");}WebElementbody=driver.findElement(By.tagName("body"));Assertions.assertEquals("Creamy, delicious cheese!",body.getText());}@TestpublicvoidinterceptRequests(){AtomicBooleancompleted=newAtomicBoolean(false);try(NetworkInterceptorignored=newNetworkInterceptor(driver,(Filter)next->req->{if(req.getUri().contains("one.js")){req=newHttpRequest(HttpMethod.GET,req.getUri().replace("one.js","two.js"));}completed.set(true);returnnext.execute(req);})){driver.get("https://www.selenium.dev/selenium/web/devToolsRequestInterceptionTest.html");driver.findElement(By.tagName("button")).click();}Assertions.assertEquals("two",driver.findElement(By.id("result")).getText());}@TestpublicvoidperformanceMetrics(){driver.get("https://www.selenium.dev/selenium/web/frameset.html");DevToolsdevTools=((HasDevTools)driver).getDevTools();devTools.createSession();devTools.send(Performance.enable(Optional.empty()));List<Metric>metricList=devTools.send(Performance.getMetrics());Map<String,Number>metrics=newHashMap<>();for(Metricmetric:metricList){metrics.put(metric.getName(),metric.getValue());}Assertions.assertTrue(metrics.get("DevToolsCommandDuration").doubleValue()>0);Assertions.assertEquals(12,metrics.get("Frames").intValue());}@TestpublicvoidsetCookie(){DevToolsdevTools=((HasDevTools)driver).getDevTools();devTools.createSession();devTools.send(Network.setCookie("cheese","gouda",Optional.empty(),Optional.of("www.selenium.dev"),Optional.empty(),Optional.of(true),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty()));driver.get("https://www.selenium.dev");Cookiecheese=driver.manage().getCookieNamed("cheese");Assertions.assertEquals("gouda",cheese.getValue());}@TestpublicvoidwaitForDownload(){driver.get("https://www.selenium.dev/selenium/web/downloads/download.html");DevToolsdevTools=((HasDevTools)driver).getDevTools();devTools.createSession();devTools.send(Browser.setDownloadBehavior(Browser.SetDownloadBehaviorBehavior.ALLOWANDNAME,Optional.empty(),Optional.of(""),Optional.of(true)));AtomicBooleancompleted=newAtomicBoolean(false);devTools.addListener(Browser.downloadProgress(),e->completed.set(Objects.equals(e.getState().toString(),"completed")));driver.findElement(By.id("file-2")).click();Assertions.assertDoesNotThrow(()->wait.until(_d->completed));}}
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L56-L65" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
usingSystem.Threading.Tasks;usingMicrosoft.VisualStudio.TestTools.UnitTesting;usingOpenQA.Selenium;usingOpenQA.Selenium.DevTools;usingSystem.Linq;usingOpenQA.Selenium.DevTools.V132.Network;usingOpenQA.Selenium.DevTools.V132.Performance;namespaceSeleniumDocs.BiDi.CDP{[TestClass]publicclassNetworkTest:BaseTest{[TestInitialize]publicvoidStartup(){StartDriver("132");}[TestMethod]publicasyncTaskBasicAuthentication(){varhandler=newNetworkAuthenticationHandler(){UriMatcher=uri=>uri.AbsoluteUri.Contains("herokuapp"),Credentials=newPasswordCredentials("admin","admin")};varnetworkInterceptor=driver.Manage().Network;networkInterceptor.AddAuthenticationHandler(handler);awaitnetworkInterceptor.StartMonitoring();driver.Navigate().GoToUrl("https://the-internet.herokuapp.com/basic_auth");awaitnetworkInterceptor.StopMonitoring();Assert.AreEqual("Congratulations! You must have the proper credentials.",driver.FindElement(By.TagName("p")).Text);}[TestMethod]publicasyncTaskRecordNetworkResponse(){varcontentType=newList<string>();INetworknetworkInterceptor=driver.Manage().Network;networkInterceptor.NetworkResponseReceived+=(,e)=>{contentType.Add(e.ResponseHeaders["content-type"]);};awaitnetworkInterceptor.StartMonitoring();driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/blank.html");awaitnetworkInterceptor.StopMonitoring();Assert.AreEqual("text/html; charset=utf-8",contentType[0]);}[TestMethod]publicasyncTaskTransformNetworkResponse(){varhandler=newNetworkResponseHandler(){ResponseMatcher==>true,ResponseTransformer=_=>newHttpResponseData{StatusCode=200,Body="Creamy, delicious cheese!"}};INetworknetworkInterceptor=driver.Manage().Network;networkInterceptor.AddResponseHandler(handler);awaitnetworkInterceptor.StartMonitoring();driver.Navigate().GoToUrl("https://www.selenium.dev");awaitnetworkInterceptor.StopMonitoring();varbody=driver.FindElement(By.TagName("body"));Assert.AreEqual("Creamy, delicious cheese!",body.Text);}[TestMethod]publicasyncTaskTransformNetworkRequest(){varhandler=newNetworkRequestHandler{RequestMatcher=request=>request.Url.Contains("one.js"),RequestTransformer=request=>{request.Url=request.Url.Replace("one","two");returnrequest;}};INetworknetworkInterceptor=driver.Manage().Network;networkInterceptor.AddRequestHandler(handler);awaitnetworkInterceptor.StartMonitoring();driver.Url="https://www.selenium.dev/selenium/web/devToolsRequestInterceptionTest.html";driver.FindElement(By.TagName("button")).Click();awaitnetworkInterceptor.StopMonitoring();Assert.AreEqual("two",driver.FindElement(By.Id("result")).Text);}[TestMethod]publicasyncTaskPerformanceMetrics(){driver.Url="https://www.selenium.dev/selenium/web/frameset.html";varsession=((IDevTools)driver).GetDevToolsSession();vardomains=session.GetVersionSpecificDomains<OpenQA.Selenium.DevTools.V132.DevToolsSessionDomains>();awaitdomains.Performance.Enable(newOpenQA.Selenium.DevTools.V132.Performance.EnableCommandSettings());varmetricsResponse=awaitsession.SendCommand<GetMetricsCommandSettings,GetMetricsCommandResponse>(newGetMetricsCommandSettings());varmetrics=metricsResponse.Metrics.ToDictionary(dict=>dict.Name,dict=>dict.Value);Assert.IsTrue(metrics["DevToolsCommandDuration"]>0);Assert.AreEqual(12,metrics["Frames"]);}[TestMethod]publicasyncTaskSetCookie(){varsession=((IDevTools)driver).GetDevToolsSession();vardomains=session.GetVersionSpecificDomains<OpenQA.Selenium.DevTools.V132.DevToolsSessionDomains>();awaitdomains.Network.Enable(newOpenQA.Selenium.DevTools.V132.Network.EnableCommandSettings());varcookieCommandSettings=newSetCookieCommandSettings{Name="cheese",Value="gouda",Domain="www.selenium.dev",Secure=true};awaitdomains.Network.SetCookie(cookieCommandSettings);driver.Url="https://www.selenium.dev";OpenQA.Selenium.Cookiecheese=driver.Manage().Cookies.GetCookieNamed("cheese");Assert.AreEqual("gouda",cheese.Value);}}}
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L46-L51" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
require'spec_helper'RSpec.describe'Network'dolet(:driver){start_session}it'does basic authentication'dodriver.register(username:'admin',password:'admin',uri:/herokuapp/)driver.get('https://the-internet.herokuapp.com/basic_auth')expect(driver.find_element(tag_name:'p').text).toeq('Congratulations! You must have the proper credentials.')endit'records network response'docontent_type=[]driver.interceptdo|request,&continue|continue.call(request)do|response|content_type<<response.headers['content-type']endenddriver.get('https://www.selenium.dev/selenium/web/blank.html')expect(content_type.first).toeq('text/html; charset=utf-8')endit'transforms network response'dodriver.interceptdo|request,&continue|continue.call(request)do|response|response.body='Creamy, delicious cheese!'ifrequest.url.include?('blank')endenddriver.get('https://www.selenium.dev/selenium/web/blank.html')expect(driver.find_element(tag_name:'body').text).toeq('Creamy, delicious cheese!')endit'intercepts network request'dodriver.interceptdo|request,&continue|uri=URI(request.url)request.url=uri.to_s.gsub('one','two')ifuri.path&.end_with?('one.js')continue.call(request)enddriver.get('https://www.selenium.dev/selenium/web/devToolsRequestInterceptionTest.html')driver.find_element(tag_name:'button').clickexpect(driver.find_element(id:'result').text).toeq('two')endit'gets performance metrics'dodriver.get('https://www.selenium.dev/selenium/web/frameset.html')driver.devtools.performance.enablemetric_list=driver.devtools.performance.get_metrics.dig('result','metrics')metrics=metric_list.each_with_object({})do|metric,hash|hash[metric['name']]=metric['value']endexpect(metrics['DevToolsCommandDuration']).tobe>0expect(metrics['Frames']).toeq12endit'sets cookie'dodriver.devtools.network.set_cookie(name:'cheese',value:'gouda',domain:'www.selenium.dev',secure:true)driver.get('https://www.selenium.dev')cheese=driver.manage.cookie_named('cheese')expect(cheese[:value]).toeq'gouda'endit'waits for downloads',except:{platform::windows}dodriver.get('https://www.selenium.dev/selenium/web/downloads/download.html')driver.devtools.browser.set_download_behavior(behavior:'allow',download_path:'',events_enabled:true)driver.devtools.browser.on(:download_progress)do|progress|@completed=progress['state']=='completed'enddriver.find_element(id:'file-2').clickexpect{Selenium::WebDriver::Wait.new.until{@completed}}.not_toraise_exceptionendend
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/ruby/spec/bidi/cdp/network_spec.rb#L20-L24" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
importcom.google.common.net.MediaType;importdev.selenium.BaseTest;importjava.net.;importjava.time.Duration;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.Objects;importjava.util.Optional;importjava.util.concurrent.CopyOnWriteArrayList;importjava.util.concurrent.atomic.AtomicBoolean;importjava.util.function.Predicate;importjava.util.function.Supplier;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.BeforeEach;importorg.junit.jupiter.api.Test;importorg.openqa.selenium.;importorg.openqa.selenium.chrome.ChromeDriver;importorg.openqa.selenium.devtools.DevTools;importorg.openqa.selenium.devtools.HasDevTools;importorg.openqa.selenium.devtools.NetworkInterceptor;importorg.openqa.selenium.devtools.v134.browser.Browser;importorg.openqa.selenium.devtools.v134.network.Network;importorg.openqa.selenium.devtools.v134.performance.Performance;importorg.openqa.selenium.devtools.v134.performance.model.Metric;importorg.openqa.selenium.remote.http.*;importorg.openqa.selenium.support.ui.WebDriverWait;publicclassNetworkTestextendsBaseTest{@BeforeEachpublicvoidcreateSession(){driver=newChromeDriver();wait=newWebDriverWait(driver,Duration.ofSeconds(10));}@TestpublicvoidbasicAuthentication(){Predicate<URI>uriPredicate=uri->uri.toString().contains("herokuapp.com");Supplier<Credentials>authentication=UsernameAndPassword.of("admin","admin");((HasAuthentication)driver).register(uriPredicate,authentication);driver.get("https://the-internet.herokuapp.com/basic_auth");StringsuccessMessage="Congratulations! You must have the proper credentials.";WebElementelementMessage=driver.findElement(By.tagName("p"));Assertions.assertEquals(successMessage,elementMessage.getText());}@TestpublicvoidrecordResponse(){CopyOnWriteArrayList<String>contentType=newCopyOnWriteArrayList<>();try(NetworkInterceptorignored=newNetworkInterceptor(driver,(Filter)next->req->{HttpResponseres=next.execute(req);contentType.add(res.getHeader("Content-Type"));returnres;})){driver.get("https://www.selenium.dev/selenium/web/blank.html");wait.until(_d->contentType.size()>1);}Assertions.assertEquals("text/html; charset=utf-8",contentType.get(0));}@TestpublicvoidtransformResponses(){try(NetworkInterceptorignored=newNetworkInterceptor(driver,Route.matching(req->true).to(()->req->newHttpResponse().setStatus(200).addHeader("Content-Type",MediaType.HTML_UTF_8.toString()).setContent(Contents.utf8String("Creamy, delicious cheese!"))))){driver.get("https://www.selenium.dev/selenium/web/blank.html");}WebElementbody=driver.findElement(By.tagName("body"));Assertions.assertEquals("Creamy, delicious cheese!",body.getText());}@TestpublicvoidinterceptRequests(){AtomicBooleancompleted=newAtomicBoolean(false);try(NetworkInterceptorignored=newNetworkInterceptor(driver,(Filter)next->req->{if(req.getUri().contains("one.js")){req=newHttpRequest(HttpMethod.GET,req.getUri().replace("one.js","two.js"));}completed.set(true);returnnext.execute(req);})){driver.get("https://www.selenium.dev/selenium/web/devToolsRequestInterceptionTest.html");driver.findElement(By.tagName("button")).click();}Assertions.assertEquals("two",driver.findElement(By.id("result")).getText());}@TestpublicvoidperformanceMetrics(){driver.get("https://www.selenium.dev/selenium/web/frameset.html");DevToolsdevTools=((HasDevTools)driver).getDevTools();devTools.createSession();devTools.send(Performance.enable(Optional.empty()));List<Metric>metricList=devTools.send(Performance.getMetrics());Map<String,Number>metrics=newHashMap<>();for(Metricmetric:metricList){metrics.put(metric.getName(),metric.getValue());}Assertions.assertTrue(metrics.get("DevToolsCommandDuration").doubleValue()>0);Assertions.assertEquals(12,metrics.get("Frames").intValue());}@TestpublicvoidsetCookie(){DevToolsdevTools=((HasDevTools)driver).getDevTools();devTools.createSession();devTools.send(Network.setCookie("cheese","gouda",Optional.empty(),Optional.of("www.selenium.dev"),Optional.empty(),Optional.of(true),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty()));driver.get("https://www.selenium.dev");Cookiecheese=driver.manage().getCookieNamed("cheese");Assertions.assertEquals("gouda",cheese.getValue());}@TestpublicvoidwaitForDownload(){driver.get("https://www.selenium.dev/selenium/web/downloads/download.html");DevToolsdevTools=((HasDevTools)driver).getDevTools();devTools.createSession();devTools.send(Browser.setDownloadBehavior(Browser.SetDownloadBehaviorBehavior.ALLOWANDNAME,Optional.empty(),Optional.of(""),Optional.of(true)));AtomicBooleancompleted=newAtomicBoolean(false);devTools.addListener(Browser.downloadProgress(),e->completed.set(Objects.equals(e.getState().toString(),"completed")));driver.findElement(By.id("file-2")).click();Assertions.assertDoesNotThrow(()->wait.until(_d->completed));}}
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L75-L85" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
usingSystem.Threading.Tasks;usingMicrosoft.VisualStudio.TestTools.UnitTesting;usingOpenQA.Selenium;usingOpenQA.Selenium.DevTools;usingSystem.Linq;usingOpenQA.Selenium.DevTools.V132.Network;usingOpenQA.Selenium.DevTools.V132.Performance;namespaceSeleniumDocs.BiDi.CDP{[TestClass]publicclassNetworkTest:BaseTest{[TestInitialize]publicvoidStartup(){StartDriver("132");}[TestMethod]publicasyncTaskBasicAuthentication(){varhandler=newNetworkAuthenticationHandler(){UriMatcher=uri=>uri.AbsoluteUri.Contains("herokuapp"),Credentials=newPasswordCredentials("admin","admin")};varnetworkInterceptor=driver.Manage().Network;networkInterceptor.AddAuthenticationHandler(handler);awaitnetworkInterceptor.StartMonitoring();driver.Navigate().GoToUrl("https://the-internet.herokuapp.com/basic_auth");awaitnetworkInterceptor.StopMonitoring();Assert.AreEqual("Congratulations! You must have the proper credentials.",driver.FindElement(By.TagName("p")).Text);}[TestMethod]publicasyncTaskRecordNetworkResponse(){varcontentType=newList<string>();INetworknetworkInterceptor=driver.Manage().Network;networkInterceptor.NetworkResponseReceived+=(,e)=>{contentType.Add(e.ResponseHeaders["content-type"]);};awaitnetworkInterceptor.StartMonitoring();driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/blank.html");awaitnetworkInterceptor.StopMonitoring();Assert.AreEqual("text/html; charset=utf-8",contentType[0]);}[TestMethod]publicasyncTaskTransformNetworkResponse(){varhandler=newNetworkResponseHandler(){ResponseMatcher==>true,ResponseTransformer=_=>newHttpResponseData{StatusCode=200,Body="Creamy, delicious cheese!"}};INetworknetworkInterceptor=driver.Manage().Network;networkInterceptor.AddResponseHandler(handler);awaitnetworkInterceptor.StartMonitoring();driver.Navigate().GoToUrl("https://www.selenium.dev");awaitnetworkInterceptor.StopMonitoring();varbody=driver.FindElement(By.TagName("body"));Assert.AreEqual("Creamy, delicious cheese!",body.Text);}[TestMethod]publicasyncTaskTransformNetworkRequest(){varhandler=newNetworkRequestHandler{RequestMatcher=request=>request.Url.Contains("one.js"),RequestTransformer=request=>{request.Url=request.Url.Replace("one","two");returnrequest;}};INetworknetworkInterceptor=driver.Manage().Network;networkInterceptor.AddRequestHandler(handler);awaitnetworkInterceptor.StartMonitoring();driver.Url="https://www.selenium.dev/selenium/web/devToolsRequestInterceptionTest.html";driver.FindElement(By.TagName("button")).Click();awaitnetworkInterceptor.StopMonitoring();Assert.AreEqual("two",driver.FindElement(By.Id("result")).Text);}[TestMethod]publicasyncTaskPerformanceMetrics(){driver.Url="https://www.selenium.dev/selenium/web/frameset.html";varsession=((IDevTools)driver).GetDevToolsSession();vardomains=session.GetVersionSpecificDomains<OpenQA.Selenium.DevTools.V132.DevToolsSessionDomains>();awaitdomains.Performance.Enable(newOpenQA.Selenium.DevTools.V132.Performance.EnableCommandSettings());varmetricsResponse=awaitsession.SendCommand<GetMetricsCommandSettings,GetMetricsCommandResponse>(newGetMetricsCommandSettings());varmetrics=metricsResponse.Metrics.ToDictionary(dict=>dict.Name,dict=>dict.Value);Assert.IsTrue(metrics["DevToolsCommandDuration"]>0);Assert.AreEqual(12,metrics["Frames"]);}[TestMethod]publicasyncTaskSetCookie(){varsession=((IDevTools)driver).GetDevToolsSession();vardomains=session.GetVersionSpecificDomains<OpenQA.Selenium.DevTools.V132.DevToolsSessionDomains>();awaitdomains.Network.Enable(newOpenQA.Selenium.DevTools.V132.Network.EnableCommandSettings());varcookieCommandSettings=newSetCookieCommandSettings{Name="cheese",Value="gouda",Domain="www.selenium.dev",Secure=true};awaitdomains.Network.SetCookie(cookieCommandSettings);driver.Url="https://www.selenium.dev";OpenQA.Selenium.Cookiecheese=driver.Manage().Cookies.GetCookieNamed("cheese");Assert.AreEqual("gouda",cheese.Value);}}}
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L62-L73" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
require'spec_helper'RSpec.describe'Network'dolet(:driver){start_session}it'does basic authentication'dodriver.register(username:'admin',password:'admin',uri:/herokuapp/)driver.get('https://the-internet.herokuapp.com/basic_auth')expect(driver.find_element(tag_name:'p').text).toeq('Congratulations! You must have the proper credentials.')endit'records network response'docontent_type=[]driver.interceptdo|request,&continue|continue.call(request)do|response|content_type<<response.headers['content-type']endenddriver.get('https://www.selenium.dev/selenium/web/blank.html')expect(content_type.first).toeq('text/html; charset=utf-8')endit'transforms network response'dodriver.interceptdo|request,&continue|continue.call(request)do|response|response.body='Creamy, delicious cheese!'ifrequest.url.include?('blank')endenddriver.get('https://www.selenium.dev/selenium/web/blank.html')expect(driver.find_element(tag_name:'body').text).toeq('Creamy, delicious cheese!')endit'intercepts network request'dodriver.interceptdo|request,&continue|uri=URI(request.url)request.url=uri.to_s.gsub('one','two')ifuri.path&.end_with?('one.js')continue.call(request)enddriver.get('https://www.selenium.dev/selenium/web/devToolsRequestInterceptionTest.html')driver.find_element(tag_name:'button').clickexpect(driver.find_element(id:'result').text).toeq('two')endit'gets performance metrics'dodriver.get('https://www.selenium.dev/selenium/web/frameset.html')driver.devtools.performance.enablemetric_list=driver.devtools.performance.get_metrics.dig('result','metrics')metrics=metric_list.each_with_object({})do|metric,hash|hash[metric['name']]=metric['value']endexpect(metrics['DevToolsCommandDuration']).tobe>0expect(metrics['Frames']).toeq12endit'sets cookie'dodriver.devtools.network.set_cookie(name:'cheese',value:'gouda',domain:'www.selenium.dev',secure:true)driver.get('https://www.selenium.dev')cheese=driver.manage.cookie_named('cheese')expect(cheese[:value]).toeq'gouda'endit'waits for downloads',except:{platform::windows}dodriver.get('https://www.selenium.dev/selenium/web/downloads/download.html')driver.devtools.browser.set_download_behavior(behavior:'allow',download_path:'',events_enabled:true)driver.devtools.browser.on(:download_progress)do|progress|@completed=progress['state']=='completed'enddriver.find_element(id:'file-2').clickexpect{Selenium::WebDriver::Wait.new.until{@completed}}.not_toraise_exceptionendend
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/ruby/spec/bidi/cdp/network_spec.rb#L31-L35" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
importcom.google.common.net.MediaType;importdev.selenium.BaseTest;importjava.net.;importjava.time.Duration;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.Objects;importjava.util.Optional;importjava.util.concurrent.CopyOnWriteArrayList;importjava.util.concurrent.atomic.AtomicBoolean;importjava.util.function.Predicate;importjava.util.function.Supplier;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.BeforeEach;importorg.junit.jupiter.api.Test;importorg.openqa.selenium.;importorg.openqa.selenium.chrome.ChromeDriver;importorg.openqa.selenium.devtools.DevTools;importorg.openqa.selenium.devtools.HasDevTools;importorg.openqa.selenium.devtools.NetworkInterceptor;importorg.openqa.selenium.devtools.v134.browser.Browser;importorg.openqa.selenium.devtools.v134.network.Network;importorg.openqa.selenium.devtools.v134.performance.Performance;importorg.openqa.selenium.devtools.v134.performance.model.Metric;importorg.openqa.selenium.remote.http.*;importorg.openqa.selenium.support.ui.WebDriverWait;publicclassNetworkTestextendsBaseTest{@BeforeEachpublicvoidcreateSession(){driver=newChromeDriver();wait=newWebDriverWait(driver,Duration.ofSeconds(10));}@TestpublicvoidbasicAuthentication(){Predicate<URI>uriPredicate=uri->uri.toString().contains("herokuapp.com");Supplier<Credentials>authentication=UsernameAndPassword.of("admin","admin");((HasAuthentication)driver).register(uriPredicate,authentication);driver.get("https://the-internet.herokuapp.com/basic_auth");StringsuccessMessage="Congratulations! You must have the proper credentials.";WebElementelementMessage=driver.findElement(By.tagName("p"));Assertions.assertEquals(successMessage,elementMessage.getText());}@TestpublicvoidrecordResponse(){CopyOnWriteArrayList<String>contentType=newCopyOnWriteArrayList<>();try(NetworkInterceptorignored=newNetworkInterceptor(driver,(Filter)next->req->{HttpResponseres=next.execute(req);contentType.add(res.getHeader("Content-Type"));returnres;})){driver.get("https://www.selenium.dev/selenium/web/blank.html");wait.until(_d->contentType.size()>1);}Assertions.assertEquals("text/html; charset=utf-8",contentType.get(0));}@TestpublicvoidtransformResponses(){try(NetworkInterceptorignored=newNetworkInterceptor(driver,Route.matching(req->true).to(()->req->newHttpResponse().setStatus(200).addHeader("Content-Type",MediaType.HTML_UTF_8.toString()).setContent(Contents.utf8String("Creamy, delicious cheese!"))))){driver.get("https://www.selenium.dev/selenium/web/blank.html");}WebElementbody=driver.findElement(By.tagName("body"));Assertions.assertEquals("Creamy, delicious cheese!",body.getText());}@TestpublicvoidinterceptRequests(){AtomicBooleancompleted=newAtomicBoolean(false);try(NetworkInterceptorignored=newNetworkInterceptor(driver,(Filter)next->req->{if(req.getUri().contains("one.js")){req=newHttpRequest(HttpMethod.GET,req.getUri().replace("one.js","two.js"));}completed.set(true);returnnext.execute(req);})){driver.get("https://www.selenium.dev/selenium/web/devToolsRequestInterceptionTest.html");driver.findElement(By.tagName("button")).click();}Assertions.assertEquals("two",driver.findElement(By.id("result")).getText());}@TestpublicvoidperformanceMetrics(){driver.get("https://www.selenium.dev/selenium/web/frameset.html");DevToolsdevTools=((HasDevTools)driver).getDevTools();devTools.createSession();devTools.send(Performance.enable(Optional.empty()));List<Metric>metricList=devTools.send(Performance.getMetrics());Map<String,Number>metrics=newHashMap<>();for(Metricmetric:metricList){metrics.put(metric.getName(),metric.getValue());}Assertions.assertTrue(metrics.get("DevToolsCommandDuration").doubleValue()>0);Assertions.assertEquals(12,metrics.get("Frames").intValue());}@TestpublicvoidsetCookie(){DevToolsdevTools=((HasDevTools)driver).getDevTools();devTools.createSession();devTools.send(Network.setCookie("cheese","gouda",Optional.empty(),Optional.of("www.selenium.dev"),Optional.empty(),Optional.of(true),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty()));driver.get("https://www.selenium.dev");Cookiecheese=driver.manage().getCookieNamed("cheese");Assertions.assertEquals("gouda",cheese.getValue());}@TestpublicvoidwaitForDownload(){driver.get("https://www.selenium.dev/selenium/web/downloads/download.html");DevToolsdevTools=((HasDevTools)driver).getDevTools();devTools.createSession();devTools.send(Browser.setDownloadBehavior(Browser.SetDownloadBehaviorBehavior.ALLOWANDNAME,Optional.empty(),Optional.of(""),Optional.of(true)));AtomicBooleancompleted=newAtomicBoolean(false);devTools.addListener(Browser.downloadProgress(),e->completed.set(Objects.equals(e.getState().toString(),"completed")));driver.findElement(By.id("file-2")).click();Assertions.assertDoesNotThrow(()->wait.until(_d->completed));}}
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L97-L110" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
usingSystem.Threading.Tasks;usingMicrosoft.VisualStudio.TestTools.UnitTesting;usingOpenQA.Selenium;usingOpenQA.Selenium.DevTools;usingSystem.Linq;usingOpenQA.Selenium.DevTools.V132.Network;usingOpenQA.Selenium.DevTools.V132.Performance;namespaceSeleniumDocs.BiDi.CDP{[TestClass]publicclassNetworkTest:BaseTest{[TestInitialize]publicvoidStartup(){StartDriver("132");}[TestMethod]publicasyncTaskBasicAuthentication(){varhandler=newNetworkAuthenticationHandler(){UriMatcher=uri=>uri.AbsoluteUri.Contains("herokuapp"),Credentials=newPasswordCredentials("admin","admin")};varnetworkInterceptor=driver.Manage().Network;networkInterceptor.AddAuthenticationHandler(handler);awaitnetworkInterceptor.StartMonitoring();driver.Navigate().GoToUrl("https://the-internet.herokuapp.com/basic_auth");awaitnetworkInterceptor.StopMonitoring();Assert.AreEqual("Congratulations! You must have the proper credentials.",driver.FindElement(By.TagName("p")).Text);}[TestMethod]publicasyncTaskRecordNetworkResponse(){varcontentType=newList<string>();INetworknetworkInterceptor=driver.Manage().Network;networkInterceptor.NetworkResponseReceived+=(,e)=>{contentType.Add(e.ResponseHeaders["content-type"]);};awaitnetworkInterceptor.StartMonitoring();driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/blank.html");awaitnetworkInterceptor.StopMonitoring();Assert.AreEqual("text/html; charset=utf-8",contentType[0]);}[TestMethod]publicasyncTaskTransformNetworkResponse(){varhandler=newNetworkResponseHandler(){ResponseMatcher==>true,ResponseTransformer=_=>newHttpResponseData{StatusCode=200,Body="Creamy, delicious cheese!"}};INetworknetworkInterceptor=driver.Manage().Network;networkInterceptor.AddResponseHandler(handler);awaitnetworkInterceptor.StartMonitoring();driver.Navigate().GoToUrl("https://www.selenium.dev");awaitnetworkInterceptor.StopMonitoring();varbody=driver.FindElement(By.TagName("body"));Assert.AreEqual("Creamy, delicious cheese!",body.Text);}[TestMethod]publicasyncTaskTransformNetworkRequest(){varhandler=newNetworkRequestHandler{RequestMatcher=request=>request.Url.Contains("one.js"),RequestTransformer=request=>{request.Url=request.Url.Replace("one","two");returnrequest;}};INetworknetworkInterceptor=driver.Manage().Network;networkInterceptor.AddRequestHandler(handler);awaitnetworkInterceptor.StartMonitoring();driver.Url="https://www.selenium.dev/selenium/web/devToolsRequestInterceptionTest.html";driver.FindElement(By.TagName("button")).Click();awaitnetworkInterceptor.StopMonitoring();Assert.AreEqual("two",driver.FindElement(By.Id("result")).Text);}[TestMethod]publicasyncTaskPerformanceMetrics(){driver.Url="https://www.selenium.dev/selenium/web/frameset.html";varsession=((IDevTools)driver).GetDevToolsSession();vardomains=session.GetVersionSpecificDomains<OpenQA.Selenium.DevTools.V132.DevToolsSessionDomains>();awaitdomains.Performance.Enable(newOpenQA.Selenium.DevTools.V132.Performance.EnableCommandSettings());varmetricsResponse=awaitsession.SendCommand<GetMetricsCommandSettings,GetMetricsCommandResponse>(newGetMetricsCommandSettings());varmetrics=metricsResponse.Metrics.ToDictionary(dict=>dict.Name,dict=>dict.Value);Assert.IsTrue(metrics["DevToolsCommandDuration"]>0);Assert.AreEqual(12,metrics["Frames"]);}[TestMethod]publicasyncTaskSetCookie(){varsession=((IDevTools)driver).GetDevToolsSession();vardomains=session.GetVersionSpecificDomains<OpenQA.Selenium.DevTools.V132.DevToolsSessionDomains>();awaitdomains.Network.Enable(newOpenQA.Selenium.DevTools.V132.Network.EnableCommandSettings());varcookieCommandSettings=newSetCookieCommandSettings{Name="cheese",Value="gouda",Domain="www.selenium.dev",Secure=true};awaitdomains.Network.SetCookie(cookieCommandSettings);driver.Url="https://www.selenium.dev";OpenQA.Selenium.Cookiecheese=driver.Manage().Cookies.GetCookieNamed("cheese");Assert.AreEqual("gouda",cheese.Value);}}}
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L85-L97" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
require'spec_helper'RSpec.describe'Network'dolet(:driver){start_session}it'does basic authentication'dodriver.register(username:'admin',password:'admin',uri:/herokuapp/)driver.get('https://the-internet.herokuapp.com/basic_auth')expect(driver.find_element(tag_name:'p').text).toeq('Congratulations! You must have the proper credentials.')endit'records network response'docontent_type=[]driver.interceptdo|request,&continue|continue.call(request)do|response|content_type<<response.headers['content-type']endenddriver.get('https://www.selenium.dev/selenium/web/blank.html')expect(content_type.first).toeq('text/html; charset=utf-8')endit'transforms network response'dodriver.interceptdo|request,&continue|continue.call(request)do|response|response.body='Creamy, delicious cheese!'ifrequest.url.include?('blank')endenddriver.get('https://www.selenium.dev/selenium/web/blank.html')expect(driver.find_element(tag_name:'body').text).toeq('Creamy, delicious cheese!')endit'intercepts network request'dodriver.interceptdo|request,&continue|uri=URI(request.url)request.url=uri.to_s.gsub('one','two')ifuri.path&.end_with?('one.js')continue.call(request)enddriver.get('https://www.selenium.dev/selenium/web/devToolsRequestInterceptionTest.html')driver.find_element(tag_name:'button').clickexpect(driver.find_element(id:'result').text).toeq('two')endit'gets performance metrics'dodriver.get('https://www.selenium.dev/selenium/web/frameset.html')driver.devtools.performance.enablemetric_list=driver.devtools.performance.get_metrics.dig('result','metrics')metrics=metric_list.each_with_object({})do|metric,hash|hash[metric['name']]=metric['value']endexpect(metrics['DevToolsCommandDuration']).tobe>0expect(metrics['Frames']).toeq12endit'sets cookie'dodriver.devtools.network.set_cookie(name:'cheese',value:'gouda',domain:'www.selenium.dev',secure:true)driver.get('https://www.selenium.dev')cheese=driver.manage.cookie_named('cheese')expect(cheese[:value]).toeq'gouda'endit'waits for downloads',except:{platform::windows}dodriver.get('https://www.selenium.dev/selenium/web/downloads/download.html')driver.devtools.browser.set_download_behavior(behavior:'allow',download_path:'',events_enabled:true)driver.devtools.browser.on(:download_progress)do|progress|@completed=progress['state']=='completed'enddriver.find_element(id:'file-2').clickexpect{Selenium::WebDriver::Wait.new.until{@completed}}.not_toraise_exceptionendend
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/ruby/spec/bidi/cdp/network_spec.rb#L42-L46" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
importcom.google.common.net.MediaType;importdev.selenium.BaseTest;importjava.net.;importjava.time.Duration;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.Objects;importjava.util.Optional;importjava.util.concurrent.CopyOnWriteArrayList;importjava.util.concurrent.atomic.AtomicBoolean;importjava.util.function.Predicate;importjava.util.function.Supplier;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.BeforeEach;importorg.junit.jupiter.api.Test;importorg.openqa.selenium.;importorg.openqa.selenium.chrome.ChromeDriver;importorg.openqa.selenium.devtools.DevTools;importorg.openqa.selenium.devtools.HasDevTools;importorg.openqa.selenium.devtools.NetworkInterceptor;importorg.openqa.selenium.devtools.v134.browser.Browser;importorg.openqa.selenium.devtools.v134.network.Network;importorg.openqa.selenium.devtools.v134.performance.Performance;importorg.openqa.selenium.devtools.v134.performance.model.Metric;importorg.openqa.selenium.remote.http.*;importorg.openqa.selenium.support.ui.WebDriverWait;publicclassNetworkTestextendsBaseTest{@BeforeEachpublicvoidcreateSession(){driver=newChromeDriver();wait=newWebDriverWait(driver,Duration.ofSeconds(10));}@TestpublicvoidbasicAuthentication(){Predicate<URI>uriPredicate=uri->uri.toString().contains("herokuapp.com");Supplier<Credentials>authentication=UsernameAndPassword.of("admin","admin");((HasAuthentication)driver).register(uriPredicate,authentication);driver.get("https://the-internet.herokuapp.com/basic_auth");StringsuccessMessage="Congratulations! You must have the proper credentials.";WebElementelementMessage=driver.findElement(By.tagName("p"));Assertions.assertEquals(successMessage,elementMessage.getText());}@TestpublicvoidrecordResponse(){CopyOnWriteArrayList<String>contentType=newCopyOnWriteArrayList<>();try(NetworkInterceptorignored=newNetworkInterceptor(driver,(Filter)next->req->{HttpResponseres=next.execute(req);contentType.add(res.getHeader("Content-Type"));returnres;})){driver.get("https://www.selenium.dev/selenium/web/blank.html");wait.until(_d->contentType.size()>1);}Assertions.assertEquals("text/html; charset=utf-8",contentType.get(0));}@TestpublicvoidtransformResponses(){try(NetworkInterceptorignored=newNetworkInterceptor(driver,Route.matching(req->true).to(()->req->newHttpResponse().setStatus(200).addHeader("Content-Type",MediaType.HTML_UTF_8.toString()).setContent(Contents.utf8String("Creamy, delicious cheese!"))))){driver.get("https://www.selenium.dev/selenium/web/blank.html");}WebElementbody=driver.findElement(By.tagName("body"));Assertions.assertEquals("Creamy, delicious cheese!",body.getText());}@TestpublicvoidinterceptRequests(){AtomicBooleancompleted=newAtomicBoolean(false);try(NetworkInterceptorignored=newNetworkInterceptor(driver,(Filter)next->req->{if(req.getUri().contains("one.js")){req=newHttpRequest(HttpMethod.GET,req.getUri().replace("one.js","two.js"));}completed.set(true);returnnext.execute(req);})){driver.get("https://www.selenium.dev/selenium/web/devToolsRequestInterceptionTest.html");driver.findElement(By.tagName("button")).click();}Assertions.assertEquals("two",driver.findElement(By.id("result")).getText());}@TestpublicvoidperformanceMetrics(){driver.get("https://www.selenium.dev/selenium/web/frameset.html");DevToolsdevTools=((HasDevTools)driver).getDevTools();devTools.createSession();devTools.send(Performance.enable(Optional.empty()));List<Metric>metricList=devTools.send(Performance.getMetrics());Map<String,Number>metrics=newHashMap<>();for(Metricmetric:metricList){metrics.put(metric.getName(),metric.getValue());}Assertions.assertTrue(metrics.get("DevToolsCommandDuration").doubleValue()>0);Assertions.assertEquals(12,metrics.get("Frames").intValue());}@TestpublicvoidsetCookie(){DevToolsdevTools=((HasDevTools)driver).getDevTools();devTools.createSession();devTools.send(Network.setCookie("cheese","gouda",Optional.empty(),Optional.of("www.selenium.dev"),Optional.empty(),Optional.of(true),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty()));driver.get("https://www.selenium.dev");Cookiecheese=driver.manage().getCookieNamed("cheese");Assertions.assertEquals("gouda",cheese.getValue());}@TestpublicvoidwaitForDownload(){driver.get("https://www.selenium.dev/selenium/web/downloads/download.html");DevToolsdevTools=((HasDevTools)driver).getDevTools();devTools.createSession();devTools.send(Browser.setDownloadBehavior(Browser.SetDownloadBehaviorBehavior.ALLOWANDNAME,Optional.empty(),Optional.of(""),Optional.of(true)));AtomicBooleancompleted=newAtomicBoolean(false);devTools.addListener(Browser.downloadProgress(),e->completed.set(Objects.equals(e.getState().toString(),"completed")));driver.findElement(By.id("file-2")).click();Assertions.assertDoesNotThrow(()->wait.until(_d->completed));}}
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L125-L126" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
importpytestfromselenium.webdriver.common.byimportByfromselenium.webdriver.common.devtools.v134.networkimportHeaders@pytest.mark.trioasyncdeftest_basic_auth(driver):asyncwithdriver.bidi_connection()asconnection:awaitconnection.session.execute(connection.devtools.network.enable())credentials=base64.b64encode("admin:admin".encode()).decode()auth={'authorization':'Basic '+credentials}awaitconnection.session.execute(connection.devtools.network.set_extra_http_headers(Headers(auth)))driver.get('https://the-internet.herokuapp.com/basic_auth')success=driver.find_element(by=By.TAG_NAME,value='p')assertsuccess.text=='Congratulations! You must have the proper credentials.'@pytest.mark.trioasyncdeftest_performance(driver):driver.get('https://www.selenium.dev/selenium/web/frameset.html')asyncwithdriver.bidi_connection()asconnection:awaitconnection.session.execute(connection.devtools.performance.enable())metric_list=awaitconnection.session.execute(connection.devtools.performance.get_metrics())metrics={metric.name:metric.valueformetricinmetric_list}assertmetrics["DevToolsCommandDuration"]>0assertmetrics["Frames"]==12@pytest.mark.trioasyncdeftest_set_cookie(driver):asyncwithdriver.bidi_connection()asconnection:execution=connection.devtools.network.set_cookie(name="cheese",value="gouda",domain="www.selenium.dev",secure=True)awaitconnection.session.execute(execution)driver.get("https://www.selenium.dev")cheese=driver.get_cookie("cheese")assertcheese["value"]=="gouda"
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/python/tests/bidi/cdp/test_network.py#L26-L28" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
usingSystem.Threading.Tasks;usingMicrosoft.VisualStudio.TestTools.UnitTesting;usingOpenQA.Selenium;usingOpenQA.Selenium.DevTools;usingSystem.Linq;usingOpenQA.Selenium.DevTools.V132.Network;usingOpenQA.Selenium.DevTools.V132.Performance;namespaceSeleniumDocs.BiDi.CDP{[TestClass]publicclassNetworkTest:BaseTest{[TestInitialize]publicvoidStartup(){StartDriver("132");}[TestMethod]publicasyncTaskBasicAuthentication(){varhandler=newNetworkAuthenticationHandler(){UriMatcher=uri=>uri.AbsoluteUri.Contains("herokuapp"),Credentials=newPasswordCredentials("admin","admin")};varnetworkInterceptor=driver.Manage().Network;networkInterceptor.AddAuthenticationHandler(handler);awaitnetworkInterceptor.StartMonitoring();driver.Navigate().GoToUrl("https://the-internet.herokuapp.com/basic_auth");awaitnetworkInterceptor.StopMonitoring();Assert.AreEqual("Congratulations! You must have the proper credentials.",driver.FindElement(By.TagName("p")).Text);}[TestMethod]publicasyncTaskRecordNetworkResponse(){varcontentType=newList<string>();INetworknetworkInterceptor=driver.Manage().Network;networkInterceptor.NetworkResponseReceived+=(,e)=>{contentType.Add(e.ResponseHeaders["content-type"]);};awaitnetworkInterceptor.StartMonitoring();driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/blank.html");awaitnetworkInterceptor.StopMonitoring();Assert.AreEqual("text/html; charset=utf-8",contentType[0]);}[TestMethod]publicasyncTaskTransformNetworkResponse(){varhandler=newNetworkResponseHandler(){ResponseMatcher==>true,ResponseTransformer=_=>newHttpResponseData{StatusCode=200,Body="Creamy, delicious cheese!"}};INetworknetworkInterceptor=driver.Manage().Network;networkInterceptor.AddResponseHandler(handler);awaitnetworkInterceptor.StartMonitoring();driver.Navigate().GoToUrl("https://www.selenium.dev");awaitnetworkInterceptor.StopMonitoring();varbody=driver.FindElement(By.TagName("body"));Assert.AreEqual("Creamy, delicious cheese!",body.Text);}[TestMethod]publicasyncTaskTransformNetworkRequest(){varhandler=newNetworkRequestHandler{RequestMatcher=request=>request.Url.Contains("one.js"),RequestTransformer=request=>{request.Url=request.Url.Replace("one","two");returnrequest;}};INetworknetworkInterceptor=driver.Manage().Network;networkInterceptor.AddRequestHandler(handler);awaitnetworkInterceptor.StartMonitoring();driver.Url="https://www.selenium.dev/selenium/web/devToolsRequestInterceptionTest.html";driver.FindElement(By.TagName("button")).Click();awaitnetworkInterceptor.StopMonitoring();Assert.AreEqual("two",driver.FindElement(By.Id("result")).Text);}[TestMethod]publicasyncTaskPerformanceMetrics(){driver.Url="https://www.selenium.dev/selenium/web/frameset.html";varsession=((IDevTools)driver).GetDevToolsSession();vardomains=session.GetVersionSpecificDomains<OpenQA.Selenium.DevTools.V132.DevToolsSessionDomains>();awaitdomains.Performance.Enable(newOpenQA.Selenium.DevTools.V132.Performance.EnableCommandSettings());varmetricsResponse=awaitsession.SendCommand<GetMetricsCommandSettings,GetMetricsCommandResponse>(newGetMetricsCommandSettings());varmetrics=metricsResponse.Metrics.ToDictionary(dict=>dict.Name,dict=>dict.Value);Assert.IsTrue(metrics["DevToolsCommandDuration"]>0);Assert.AreEqual(12,metrics["Frames"]);}[TestMethod]publicasyncTaskSetCookie(){varsession=((IDevTools)driver).GetDevToolsSession();vardomains=session.GetVersionSpecificDomains<OpenQA.Selenium.DevTools.V132.DevToolsSessionDomains>();awaitdomains.Network.Enable(newOpenQA.Selenium.DevTools.V132.Network.EnableCommandSettings());varcookieCommandSettings=newSetCookieCommandSettings{Name="cheese",Value="gouda",Domain="www.selenium.dev",Secure=true};awaitdomains.Network.SetCookie(cookieCommandSettings);driver.Url="https://www.selenium.dev";OpenQA.Selenium.Cookiecheese=driver.Manage().Cookies.GetCookieNamed("cheese");Assert.AreEqual("gouda",cheese.Value);}}}
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L114-L118" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
require'spec_helper'RSpec.describe'Network'dolet(:driver){start_session}it'does basic authentication'dodriver.register(username:'admin',password:'admin',uri:/herokuapp/)driver.get('https://the-internet.herokuapp.com/basic_auth')expect(driver.find_element(tag_name:'p').text).toeq('Congratulations! You must have the proper credentials.')endit'records network response'docontent_type=[]driver.interceptdo|request,&continue|continue.call(request)do|response|content_type<<response.headers['content-type']endenddriver.get('https://www.selenium.dev/selenium/web/blank.html')expect(content_type.first).toeq('text/html; charset=utf-8')endit'transforms network response'dodriver.interceptdo|request,&continue|continue.call(request)do|response|response.body='Creamy, delicious cheese!'ifrequest.url.include?('blank')endenddriver.get('https://www.selenium.dev/selenium/web/blank.html')expect(driver.find_element(tag_name:'body').text).toeq('Creamy, delicious cheese!')endit'intercepts network request'dodriver.interceptdo|request,&continue|uri=URI(request.url)request.url=uri.to_s.gsub('one','two')ifuri.path&.end_with?('one.js')continue.call(request)enddriver.get('https://www.selenium.dev/selenium/web/devToolsRequestInterceptionTest.html')driver.find_element(tag_name:'button').clickexpect(driver.find_element(id:'result').text).toeq('two')endit'gets performance metrics'dodriver.get('https://www.selenium.dev/selenium/web/frameset.html')driver.devtools.performance.enablemetric_list=driver.devtools.performance.get_metrics.dig('result','metrics')metrics=metric_list.each_with_object({})do|metric,hash|hash[metric['name']]=metric['value']endexpect(metrics['DevToolsCommandDuration']).tobe>0expect(metrics['Frames']).toeq12endit'sets cookie'dodriver.devtools.network.set_cookie(name:'cheese',value:'gouda',domain:'www.selenium.dev',secure:true)driver.get('https://www.selenium.dev')cheese=driver.manage.cookie_named('cheese')expect(cheese[:value]).toeq'gouda'endit'waits for downloads',except:{platform::windows}dodriver.get('https://www.selenium.dev/selenium/web/downloads/download.html')driver.devtools.browser.set_download_behavior(behavior:'allow',download_path:'',events_enabled:true)driver.devtools.browser.on(:download_progress)do|progress|@completed=progress['state']=='completed'enddriver.find_element(id:'file-2').clickexpect{Selenium::WebDriver::Wait.new.until{@completed}}.not_toraise_exceptionendend
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/ruby/spec/bidi/cdp/network_spec.rb#L56-L57" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
importcom.google.common.net.MediaType;importdev.selenium.BaseTest;importjava.net.;importjava.time.Duration;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.Objects;importjava.util.Optional;importjava.util.concurrent.CopyOnWriteArrayList;importjava.util.concurrent.atomic.AtomicBoolean;importjava.util.function.Predicate;importjava.util.function.Supplier;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.BeforeEach;importorg.junit.jupiter.api.Test;importorg.openqa.selenium.;importorg.openqa.selenium.chrome.ChromeDriver;importorg.openqa.selenium.devtools.DevTools;importorg.openqa.selenium.devtools.HasDevTools;importorg.openqa.selenium.devtools.NetworkInterceptor;importorg.openqa.selenium.devtools.v134.browser.Browser;importorg.openqa.selenium.devtools.v134.network.Network;importorg.openqa.selenium.devtools.v134.performance.Performance;importorg.openqa.selenium.devtools.v134.performance.model.Metric;importorg.openqa.selenium.remote.http.*;importorg.openqa.selenium.support.ui.WebDriverWait;publicclassNetworkTestextendsBaseTest{@BeforeEachpublicvoidcreateSession(){driver=newChromeDriver();wait=newWebDriverWait(driver,Duration.ofSeconds(10));}@TestpublicvoidbasicAuthentication(){Predicate<URI>uriPredicate=uri->uri.toString().contains("herokuapp.com");Supplier<Credentials>authentication=UsernameAndPassword.of("admin","admin");((HasAuthentication)driver).register(uriPredicate,authentication);driver.get("https://the-internet.herokuapp.com/basic_auth");StringsuccessMessage="Congratulations! You must have the proper credentials.";WebElementelementMessage=driver.findElement(By.tagName("p"));Assertions.assertEquals(successMessage,elementMessage.getText());}@TestpublicvoidrecordResponse(){CopyOnWriteArrayList<String>contentType=newCopyOnWriteArrayList<>();try(NetworkInterceptorignored=newNetworkInterceptor(driver,(Filter)next->req->{HttpResponseres=next.execute(req);contentType.add(res.getHeader("Content-Type"));returnres;})){driver.get("https://www.selenium.dev/selenium/web/blank.html");wait.until(_d->contentType.size()>1);}Assertions.assertEquals("text/html; charset=utf-8",contentType.get(0));}@TestpublicvoidtransformResponses(){try(NetworkInterceptorignored=newNetworkInterceptor(driver,Route.matching(req->true).to(()->req->newHttpResponse().setStatus(200).addHeader("Content-Type",MediaType.HTML_UTF_8.toString()).setContent(Contents.utf8String("Creamy, delicious cheese!"))))){driver.get("https://www.selenium.dev/selenium/web/blank.html");}WebElementbody=driver.findElement(By.tagName("body"));Assertions.assertEquals("Creamy, delicious cheese!",body.getText());}@TestpublicvoidinterceptRequests(){AtomicBooleancompleted=newAtomicBoolean(false);try(NetworkInterceptorignored=newNetworkInterceptor(driver,(Filter)next->req->{if(req.getUri().contains("one.js")){req=newHttpRequest(HttpMethod.GET,req.getUri().replace("one.js","two.js"));}completed.set(true);returnnext.execute(req);})){driver.get("https://www.selenium.dev/selenium/web/devToolsRequestInterceptionTest.html");driver.findElement(By.tagName("button")).click();}Assertions.assertEquals("two",driver.findElement(By.id("result")).getText());}@TestpublicvoidperformanceMetrics(){driver.get("https://www.selenium.dev/selenium/web/frameset.html");DevToolsdevTools=((HasDevTools)driver).getDevTools();devTools.createSession();devTools.send(Performance.enable(Optional.empty()));List<Metric>metricList=devTools.send(Performance.getMetrics());Map<String,Number>metrics=newHashMap<>();for(Metricmetric:metricList){metrics.put(metric.getName(),metric.getValue());}Assertions.assertTrue(metrics.get("DevToolsCommandDuration").doubleValue()>0);Assertions.assertEquals(12,metrics.get("Frames").intValue());}@TestpublicvoidsetCookie(){DevToolsdevTools=((HasDevTools)driver).getDevTools();devTools.createSession();devTools.send(Network.setCookie("cheese","gouda",Optional.empty(),Optional.of("www.selenium.dev"),Optional.empty(),Optional.of(true),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty()));driver.get("https://www.selenium.dev");Cookiecheese=driver.manage().getCookieNamed("cheese");Assertions.assertEquals("gouda",cheese.getValue());}@TestpublicvoidwaitForDownload(){driver.get("https://www.selenium.dev/selenium/web/downloads/download.html");DevToolsdevTools=((HasDevTools)driver).getDevTools();devTools.createSession();devTools.send(Browser.setDownloadBehavior(Browser.SetDownloadBehaviorBehavior.ALLOWANDNAME,Optional.empty(),Optional.of(""),Optional.of(true)));AtomicBooleancompleted=newAtomicBoolean(false);devTools.addListener(Browser.downloadProgress(),e->completed.set(Objects.equals(e.getState().toString(),"completed")));driver.findElement(By.id("file-2")).click();Assertions.assertDoesNotThrow(()->wait.until(_d->completed));}}
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L142-L157" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
importpytestfromselenium.webdriver.common.byimportByfromselenium.webdriver.common.devtools.v134.networkimportHeaders@pytest.mark.trioasyncdeftest_basic_auth(driver):asyncwithdriver.bidi_connection()asconnection:awaitconnection.session.execute(connection.devtools.network.enable())credentials=base64.b64encode("admin:admin".encode()).decode()auth={'authorization':'Basic '+credentials}awaitconnection.session.execute(connection.devtools.network.set_extra_http_headers(Headers(auth)))driver.get('https://the-internet.herokuapp.com/basic_auth')success=driver.find_element(by=By.TAG_NAME,value='p')assertsuccess.text=='Congratulations! You must have the proper credentials.'@pytest.mark.trioasyncdeftest_performance(driver):driver.get('https://www.selenium.dev/selenium/web/frameset.html')asyncwithdriver.bidi_connection()asconnection:awaitconnection.session.execute(connection.devtools.performance.enable())metric_list=awaitconnection.session.execute(connection.devtools.performance.get_metrics())metrics={metric.name:metric.valueformetricinmetric_list}assertmetrics["DevToolsCommandDuration"]>0assertmetrics["Frames"]==12@pytest.mark.trioasyncdeftest_set_cookie(driver):asyncwithdriver.bidi_connection()asconnection:execution=connection.devtools.network.set_cookie(name="cheese",value="gouda",domain="www.selenium.dev",secure=True)awaitconnection.session.execute(execution)driver.get("https://www.selenium.dev")cheese=driver.get_cookie("cheese")assertcheese["value"]=="gouda"
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/python/tests/bidi/cdp/test_network.py#L37-L44" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
usingSystem.Threading.Tasks;usingMicrosoft.VisualStudio.TestTools.UnitTesting;usingOpenQA.Selenium;usingOpenQA.Selenium.DevTools;usingSystem.Linq;usingOpenQA.Selenium.DevTools.V132.Network;usingOpenQA.Selenium.DevTools.V132.Performance;namespaceSeleniumDocs.BiDi.CDP{[TestClass]publicclassNetworkTest:BaseTest{[TestInitialize]publicvoidStartup(){StartDriver("132");}[TestMethod]publicasyncTaskBasicAuthentication(){varhandler=newNetworkAuthenticationHandler(){UriMatcher=uri=>uri.AbsoluteUri.Contains("herokuapp"),Credentials=newPasswordCredentials("admin","admin")};varnetworkInterceptor=driver.Manage().Network;networkInterceptor.AddAuthenticationHandler(handler);awaitnetworkInterceptor.StartMonitoring();driver.Navigate().GoToUrl("https://the-internet.herokuapp.com/basic_auth");awaitnetworkInterceptor.StopMonitoring();Assert.AreEqual("Congratulations! You must have the proper credentials.",driver.FindElement(By.TagName("p")).Text);}[TestMethod]publicasyncTaskRecordNetworkResponse(){varcontentType=newList<string>();INetworknetworkInterceptor=driver.Manage().Network;networkInterceptor.NetworkResponseReceived+=(,e)=>{contentType.Add(e.ResponseHeaders["content-type"]);};awaitnetworkInterceptor.StartMonitoring();driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/blank.html");awaitnetworkInterceptor.StopMonitoring();Assert.AreEqual("text/html; charset=utf-8",contentType[0]);}[TestMethod]publicasyncTaskTransformNetworkResponse(){varhandler=newNetworkResponseHandler(){ResponseMatcher==>true,ResponseTransformer=_=>newHttpResponseData{StatusCode=200,Body="Creamy, delicious cheese!"}};INetworknetworkInterceptor=driver.Manage().Network;networkInterceptor.AddResponseHandler(handler);awaitnetworkInterceptor.StartMonitoring();driver.Navigate().GoToUrl("https://www.selenium.dev");awaitnetworkInterceptor.StopMonitoring();varbody=driver.FindElement(By.TagName("body"));Assert.AreEqual("Creamy, delicious cheese!",body.Text);}[TestMethod]publicasyncTaskTransformNetworkRequest(){varhandler=newNetworkRequestHandler{RequestMatcher=request=>request.Url.Contains("one.js"),RequestTransformer=request=>{request.Url=request.Url.Replace("one","two");returnrequest;}};INetworknetworkInterceptor=driver.Manage().Network;networkInterceptor.AddRequestHandler(handler);awaitnetworkInterceptor.StartMonitoring();driver.Url="https://www.selenium.dev/selenium/web/devToolsRequestInterceptionTest.html";driver.FindElement(By.TagName("button")).Click();awaitnetworkInterceptor.StopMonitoring();Assert.AreEqual("two",driver.FindElement(By.Id("result")).Text);}[TestMethod]publicasyncTaskPerformanceMetrics(){driver.Url="https://www.selenium.dev/selenium/web/frameset.html";varsession=((IDevTools)driver).GetDevToolsSession();vardomains=session.GetVersionSpecificDomains<OpenQA.Selenium.DevTools.V132.DevToolsSessionDomains>();awaitdomains.Performance.Enable(newOpenQA.Selenium.DevTools.V132.Performance.EnableCommandSettings());varmetricsResponse=awaitsession.SendCommand<GetMetricsCommandSettings,GetMetricsCommandResponse>(newGetMetricsCommandSettings());varmetrics=metricsResponse.Metrics.ToDictionary(dict=>dict.Name,dict=>dict.Value);Assert.IsTrue(metrics["DevToolsCommandDuration"]>0);Assert.AreEqual(12,metrics["Frames"]);}[TestMethod]publicasyncTaskSetCookie(){varsession=((IDevTools)driver).GetDevToolsSession();vardomains=session.GetVersionSpecificDomains<OpenQA.Selenium.DevTools.V132.DevToolsSessionDomains>();awaitdomains.Network.Enable(newOpenQA.Selenium.DevTools.V132.Network.EnableCommandSettings());varcookieCommandSettings=newSetCookieCommandSettings{Name="cheese",Value="gouda",Domain="www.selenium.dev",Secure=true};awaitdomains.Network.SetCookie(cookieCommandSettings);driver.Url="https://www.selenium.dev";OpenQA.Selenium.Cookiecheese=driver.Manage().Cookies.GetCookieNamed("cheese");Assert.AreEqual("gouda",cheese.Value);}}}
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L136-L143" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
require'spec_helper'RSpec.describe'Network'dolet(:driver){start_session}it'does basic authentication'dodriver.register(username:'admin',password:'admin',uri:/herokuapp/)driver.get('https://the-internet.herokuapp.com/basic_auth')expect(driver.find_element(tag_name:'p').text).toeq('Congratulations! You must have the proper credentials.')endit'records network response'docontent_type=[]driver.interceptdo|request,&continue|continue.call(request)do|response|content_type<<response.headers['content-type']endenddriver.get('https://www.selenium.dev/selenium/web/blank.html')expect(content_type.first).toeq('text/html; charset=utf-8')endit'transforms network response'dodriver.interceptdo|request,&continue|continue.call(request)do|response|response.body='Creamy, delicious cheese!'ifrequest.url.include?('blank')endenddriver.get('https://www.selenium.dev/selenium/web/blank.html')expect(driver.find_element(tag_name:'body').text).toeq('Creamy, delicious cheese!')endit'intercepts network request'dodriver.interceptdo|request,&continue|uri=URI(request.url)request.url=uri.to_s.gsub('one','two')ifuri.path&.end_with?('one.js')continue.call(request)enddriver.get('https://www.selenium.dev/selenium/web/devToolsRequestInterceptionTest.html')driver.find_element(tag_name:'button').clickexpect(driver.find_element(id:'result').text).toeq('two')endit'gets performance metrics'dodriver.get('https://www.selenium.dev/selenium/web/frameset.html')driver.devtools.performance.enablemetric_list=driver.devtools.performance.get_metrics.dig('result','metrics')metrics=metric_list.each_with_object({})do|metric,hash|hash[metric['name']]=metric['value']endexpect(metrics['DevToolsCommandDuration']).tobe>0expect(metrics['Frames']).toeq12endit'sets cookie'dodriver.devtools.network.set_cookie(name:'cheese',value:'gouda',domain:'www.selenium.dev',secure:true)driver.get('https://www.selenium.dev')cheese=driver.manage.cookie_named('cheese')expect(cheese[:value]).toeq'gouda'endit'waits for downloads',except:{platform::windows}dodriver.get('https://www.selenium.dev/selenium/web/downloads/download.html')driver.devtools.browser.set_download_behavior(behavior:'allow',download_path:'',events_enabled:true)driver.devtools.browser.on(:download_progress)do|progress|@completed=progress['state']=='completed'enddriver.find_element(id:'file-2').clickexpect{Selenium::WebDriver::Wait.new.until{@completed}}.not_toraise_exceptionendend
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/ruby/spec/bidi/cdp/network_spec.rb#L68-L71" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
importcom.google.common.net.MediaType;importdev.selenium.BaseTest;importjava.net.;importjava.time.Duration;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.Objects;importjava.util.Optional;importjava.util.concurrent.CopyOnWriteArrayList;importjava.util.concurrent.atomic.AtomicBoolean;importjava.util.function.Predicate;importjava.util.function.Supplier;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.BeforeEach;importorg.junit.jupiter.api.Test;importorg.openqa.selenium.;importorg.openqa.selenium.chrome.ChromeDriver;importorg.openqa.selenium.devtools.DevTools;importorg.openqa.selenium.devtools.HasDevTools;importorg.openqa.selenium.devtools.NetworkInterceptor;importorg.openqa.selenium.devtools.v134.browser.Browser;importorg.openqa.selenium.devtools.v134.network.Network;importorg.openqa.selenium.devtools.v134.performance.Performance;importorg.openqa.selenium.devtools.v134.performance.model.Metric;importorg.openqa.selenium.remote.http.*;importorg.openqa.selenium.support.ui.WebDriverWait;publicclassNetworkTestextendsBaseTest{@BeforeEachpublicvoidcreateSession(){driver=newChromeDriver();wait=newWebDriverWait(driver,Duration.ofSeconds(10));}@TestpublicvoidbasicAuthentication(){Predicate<URI>uriPredicate=uri->uri.toString().contains("herokuapp.com");Supplier<Credentials>authentication=UsernameAndPassword.of("admin","admin");((HasAuthentication)driver).register(uriPredicate,authentication);driver.get("https://the-internet.herokuapp.com/basic_auth");StringsuccessMessage="Congratulations! You must have the proper credentials.";WebElementelementMessage=driver.findElement(By.tagName("p"));Assertions.assertEquals(successMessage,elementMessage.getText());}@TestpublicvoidrecordResponse(){CopyOnWriteArrayList<String>contentType=newCopyOnWriteArrayList<>();try(NetworkInterceptorignored=newNetworkInterceptor(driver,(Filter)next->req->{HttpResponseres=next.execute(req);contentType.add(res.getHeader("Content-Type"));returnres;})){driver.get("https://www.selenium.dev/selenium/web/blank.html");wait.until(_d->contentType.size()>1);}Assertions.assertEquals("text/html; charset=utf-8",contentType.get(0));}@TestpublicvoidtransformResponses(){try(NetworkInterceptorignored=newNetworkInterceptor(driver,Route.matching(req->true).to(()->req->newHttpResponse().setStatus(200).addHeader("Content-Type",MediaType.HTML_UTF_8.toString()).setContent(Contents.utf8String("Creamy, delicious cheese!"))))){driver.get("https://www.selenium.dev/selenium/web/blank.html");}WebElementbody=driver.findElement(By.tagName("body"));Assertions.assertEquals("Creamy, delicious cheese!",body.getText());}@TestpublicvoidinterceptRequests(){AtomicBooleancompleted=newAtomicBoolean(false);try(NetworkInterceptorignored=newNetworkInterceptor(driver,(Filter)next->req->{if(req.getUri().contains("one.js")){req=newHttpRequest(HttpMethod.GET,req.getUri().replace("one.js","two.js"));}completed.set(true);returnnext.execute(req);})){driver.get("https://www.selenium.dev/selenium/web/devToolsRequestInterceptionTest.html");driver.findElement(By.tagName("button")).click();}Assertions.assertEquals("two",driver.findElement(By.id("result")).getText());}@TestpublicvoidperformanceMetrics(){driver.get("https://www.selenium.dev/selenium/web/frameset.html");DevToolsdevTools=((HasDevTools)driver).getDevTools();devTools.createSession();devTools.send(Performance.enable(Optional.empty()));List<Metric>metricList=devTools.send(Performance.getMetrics());Map<String,Number>metrics=newHashMap<>();for(Metricmetric:metricList){metrics.put(metric.getName(),metric.getValue());}Assertions.assertTrue(metrics.get("DevToolsCommandDuration").doubleValue()>0);Assertions.assertEquals(12,metrics.get("Frames").intValue());}@TestpublicvoidsetCookie(){DevToolsdevTools=((HasDevTools)driver).getDevTools();devTools.createSession();devTools.send(Network.setCookie("cheese","gouda",Optional.empty(),Optional.of("www.selenium.dev"),Optional.empty(),Optional.of(true),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty(),Optional.empty()));driver.get("https://www.selenium.dev");Cookiecheese=driver.manage().getCookieNamed("cheese");Assertions.assertEquals("gouda",cheese.getValue());}@TestpublicvoidwaitForDownload(){driver.get("https://www.selenium.dev/selenium/web/downloads/download.html");DevToolsdevTools=((HasDevTools)driver).getDevTools();devTools.createSession();devTools.send(Browser.setDownloadBehavior(Browser.SetDownloadBehaviorBehavior.ALLOWANDNAME,Optional.empty(),Optional.of(""),Optional.of(true)));AtomicBooleancompleted=newAtomicBoolean(false);devTools.addListener(Browser.downloadProgress(),e->completed.set(Objects.equals(e.getState().toString(),"completed")));driver.findElement(By.id("file-2")).click();Assertions.assertDoesNotThrow(()->wait.until(_d->completed));}}
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L171-L176" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
require'spec_helper'RSpec.describe'Network'dolet(:driver){start_session}it'does basic authentication'dodriver.register(username:'admin',password:'admin',uri:/herokuapp/)driver.get('https://the-internet.herokuapp.com/basic_auth')expect(driver.find_element(tag_name:'p').text).toeq('Congratulations! You must have the proper credentials.')endit'records network response'docontent_type=[]driver.interceptdo|request,&continue|continue.call(request)do|response|content_type<<response.headers['content-type']endenddriver.get('https://www.selenium.dev/selenium/web/blank.html')expect(content_type.first).toeq('text/html; charset=utf-8')endit'transforms network response'dodriver.interceptdo|request,&continue|continue.call(request)do|response|response.body='Creamy, delicious cheese!'ifrequest.url.include?('blank')endenddriver.get('https://www.selenium.dev/selenium/web/blank.html')expect(driver.find_element(tag_name:'body').text).toeq('Creamy, delicious cheese!')endit'intercepts network request'dodriver.interceptdo|request,&continue|uri=URI(request.url)request.url=uri.to_s.gsub('one','two')ifuri.path&.end_with?('one.js')continue.call(request)enddriver.get('https://www.selenium.dev/selenium/web/devToolsRequestInterceptionTest.html')driver.find_element(tag_name:'button').clickexpect(driver.find_element(id:'result').text).toeq('two')endit'gets performance metrics'dodriver.get('https://www.selenium.dev/selenium/web/frameset.html')driver.devtools.performance.enablemetric_list=driver.devtools.performance.get_metrics.dig('result','metrics')metrics=metric_list.each_with_object({})do|metric,hash|hash[metric['name']]=metric['value']endexpect(metrics['DevToolsCommandDuration']).tobe>0expect(metrics['Frames']).toeq12endit'sets cookie'dodriver.devtools.network.set_cookie(name:'cheese',value:'gouda',domain:'www.selenium.dev',secure:true)driver.get('https://www.selenium.dev')cheese=driver.manage.cookie_named('cheese')expect(cheese[:value]).toeq'gouda'endit'waits for downloads',except:{platform::windows}dodriver.get('https://www.selenium.dev/selenium/web/downloads/download.html')driver.devtools.browser.set_download_behavior(behavior:'allow',download_path:'',events_enabled:true)driver.devtools.browser.on(:download_progress)do|progress|@completed=progress['state']=='completed'enddriver.find_element(id:'file-2').clickexpect{Selenium::WebDriver::Wait.new.until{@completed}}.not_toraise_exceptionendend
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/ruby/spec/bidi/cdp/network_spec.rb#L82-L88" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>