Network

Commands

This section contains the APIs related to network commands.

Add network intercept

Selenium v4.18

            String intercept =
                    network.addIntercept(new AddInterceptParameters(InterceptPhase.BEFORE_REQUEST_SENT));
            Assertions.assertNotNull(intercept);

Selenium v4.18

  it 'intercepts network requests' do
    request_events = []
    
    driver.bidi_connection.add_network_request_listener do |event|
      request_events << event

Selenium v4.18

    assert.notEqual(intercept, null)

Selenium v4.18

def test_intercept_network_requests(driver):
    request_events = []

    def on_request(event):
        request_events.append(event)

    driver.bidi_connection.add_network_request_listener(on_request)

    driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html")

    wait = WebDriverWait(driver, 5)
    wait.until(lambda _: len(request_events) > 0)

    assert len(request_events) > 0

Remove network intercept

Selenium v4.18

                    network.addIntercept(new AddInterceptParameters(InterceptPhase.BEFORE_REQUEST_SENT));
            Assertions.assertNotNull(intercept);
            network.removeIntercept(intercept);
        }
    }

Selenium v4.18

    const intercept = await network.addIntercept(new AddInterceptParameters(InterceptPhase.BEFORE_REQUEST_SENT))
    assert.notEqual(intercept, null)

Continue request blocked at authRequired phase with credentials

Selenium v4.18

                    responseDetails ->
                            network.continueWithAuth(
                                    responseDetails.getRequest().getRequestId(),
                                    new UsernameAndPassword("admin", "admin")));
            driver.get("https://the-internet.herokuapp.com/basic_auth");
            String successMessage = "Congratulations! You must have the proper credentials.";
            WebElement elementMessage = driver.findElement(By.tagName("p"));
            Assertions.assertEquals(successMessage, elementMessage.getText());

Selenium v4.18


    await network.authRequired(async (event) => {
      await network.continueWithAuth(event.request.request, 'admin','admin')
    })
    await driver.get('https://the-internet.herokuapp.com/basic_auth')

Continue request blocked at authRequired phase without credentials

Selenium v4.18

                            // Does not handle the alert
                            network.continueWithAuthNoCredentials(responseDetails.getRequest().getRequestId()));
            driver.get("https://the-internet.herokuapp.com/basic_auth");
            Alert alert = wait.until(ExpectedConditions.alertIsPresent());
            alert.dismiss();
            Assertions.assertTrue(driver.getPageSource().contains("Not authorized"));
        }

Selenium v4.18


    await network.authRequired(async (event) => {
      await network.continueWithAuthNoCredentials(event.request.request)
    })

Cancel request blocked at authRequired phase

Selenium v4.18

                            network.cancelAuth(responseDetails.getRequest().getRequestId()));
            driver.get("https://the-internet.herokuapp.com/basic_auth");
            Assertions.assertTrue(driver.getPageSource().contains("Not authorized"));
        }
    }

    @Test

Selenium v4.18


    await network.authRequired(async (event) => {
      await network.cancelAuth(event.request.request)
    })

Fail request

Selenium v4.18

            }
    }
}

Events

This section contains the APIs related to network events.

Before Request Sent

Selenium v4.15

        try (Network network = new Network(driver)) {
            CompletableFuture<BeforeRequestSent> future = new CompletableFuture<>();
            network.onBeforeRequestSent(future::complete);
            driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");

            BeforeRequestSent requestSent = future.get(5, TimeUnit.SECONDS);

Selenium v4.15

  it 'intercepts network responses' do
    response_events = []
    
    driver.bidi_connection.add_network_response_listener do |event|
      response_events << event

Selenium v4.18

    let beforeRequestEvent = []
    const network = await Network(driver)
    await network.beforeRequestSent(function (event) {
      beforeRequestEvent.push(event)
    })

    await driver.get('https://www.selenium.dev/selenium/web/blank.html')

Selenium v4.15

def test_intercept_network_responses(driver):
    response_events = []

    def on_response(event):
        response_events.append(event)

    driver.bidi_connection.add_network_response_listener(on_response)

    driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html")

    wait = WebDriverWait(driver, 5)
    wait.until(lambda _: len(response_events) > 0)

    assert len(response_events) > 0

Response Started

Selenium v4.15

        try (Network network = new Network(driver)) {
            CompletableFuture<ResponseDetails> future = new CompletableFuture<>();
            network.onResponseStarted(future::complete);
            driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");

            ResponseDetails response = future.get(5, TimeUnit.SECONDS);
            String windowHandle = driver.getWindowHandle();

Selenium v4.15

  it 'continues network request' do
    driver.navigate.to 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
    
    driver.bidi_connection.add_network_response_listener do |event|
      request_id = event['request']['request']
      driver.bidi_connection.bidi_session.network.continue_response(request: request_id)

Selenium v4.18

    let onResponseStarted = []
    const network = await Network(driver)
    await network.responseStarted(function (event) {
      onResponseStarted.push(event)
    })

    await driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')

Selenium v4.15

def test_continue_response(driver):
    # This test demonstrates intercepting and continuing responses
    driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html")

    def on_response(event):
        request_id = event.get("request", {}).get("request")
        # Continue the response
        driver.bidi_connection.bidi_session.network.continue_response(
            request=request_id
        )

    driver.bidi_connection.add_network_response_listener(on_response)

    driver.get("https://www.selenium.dev/selenium/web/iframes.html")

Response Completed

Selenium v4.15

        try (Network network = new Network(driver)) {
            CompletableFuture<ResponseDetails> future = new CompletableFuture<>();
            network.onResponseCompleted(future::complete);
            driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");

            ResponseDetails response = future.get(5, TimeUnit.SECONDS);
            String windowHandle = driver.getWindowHandle();

Selenium v4.18

    let onResponseCompleted = []
    const network = await Network(driver)
    await network.responseCompleted(function (event) {
      onResponseCompleted.push(event)
    })

    await driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')

Auth Required

Selenium v4.17

        try (Network network = new Network(driver)) {
            CompletableFuture<ResponseDetails> future = new CompletableFuture<>();
            network.onAuthRequired(future::complete);
            driver.get("https://the-internet.herokuapp.com/basic_auth");

            ResponseDetails response = future.get(5, TimeUnit.SECONDS);

Selenium v4.17

  it 'intercepts network requests' do
    request_events = []
    
    driver.bidi_connection.add_network_request_listener do |event|
      request_events << event

Selenium v4.17

def test_intercept_network_auth_required(driver):
    auth_events = []

    def on_auth_required(event):
        auth_events.append(event)

    driver.bidi_connection.add_auth_required_listener(on_auth_required)

    # Navigate to a URL that requires authentication
    # This is a placeholder - actual auth required event would need
    # a protected resource
    driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html")