Unable to set proxy with BrowserMobProxy while modifying http header request in Selenium with Java

Software Quality Assurance & Testing Asked by udit choudhary on August 10, 2020

I am able to modify http request header using BrowserMobProxy, the same way explained

But, the problem I am having at the moment is, that I am executing my scenarios on dev/local/playpen environment (environment before System integration testing). And to open the website on this environment needs proxy to set.

When I set my proxy then it fails to modify header and apply the proxy. When I comment the proxy part then it easily modifies the header.

BrowserMobProxy proxy = new BrowserMobProxyServer();
Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy);

proxy.addRequestFilter((request, contents, messageInfo)->{
    request.headers().add("some-header-attribute", "RandomeValue");
    return null;

String _host = Utils.getConfigValue("");
String _port = Utils.getConfigValue("proxy.port");

seleniumProxy.setHttpProxy(_host + ":" + _port);
seleniumProxy.setSslProxy(_host + ":" + _port);
seleniumProxy.setFtpProxy(_host + ":" + _port);
capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);

String proxyOption = "--proxy-server=" + seleniumProxy.getHttpProxy();

One Answer

Browsermob-Proxy is a reliable solution, But while working with the remote grid machine, Browsermob-proxy isn't really helpful. Alternatively, I found this as a working solution for my setup.

Hopefully, it will be useful for someone with a similar setup.

  1. Add the ModHeader extension to the chrome browser

How to download the Modheader? Link

ChromeOptions options = new ChromeOptions();
options.addExtensions(new File(C://Downloads//modheader//modheader.crx));

// Set the Desired capabilities 
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(ChromeOptions.CAPABILITY, options);

// Instantiate the chrome driver with capabilities
WebDriver driver = new RemoteWebDriver(new URL(YOUR_HUB_URL), options);
  1. Go to the browser extensions and capture the Local Storage context ID of the ModHeader

Capture ID from ModHeader

  1. Navigate to the URL of the ModHeader to set the Local Storage Context


// set the context on the extension so the localStorage can be accessed

Where `idgpnmonknjnojddfkpgkljpfnnfcklj` is the value captured from the Step# 2
  1. Now add the headers to the request using Javascript


         "localStorage.setItem('profiles', JSON.stringify([{  title: 'Selenium', hideComment: true, appendMode: '', 
             headers: [                        
               {enabled: true, name: 'token-1', value: 'value-1', comment: ''},
               {enabled: true, name: 'token-2', value: 'value-2', comment: ''}
             respHeaders: [],
             filters: []

Where token-1, value-1, token-2, value-2 are the request headers and values that are to be added.

  1. Now navigate to the required web-application.


Answered by Praveen on August 10, 2020

Add your own answers!

Related Questions

Random pause of 2 to 5 seconds between requests Jmeter

1  Asked on November 28, 2021 by denis-filatov


Script timeout in Protractor

2  Asked on November 21, 2021 by ingridd-brito


Find button class with Selenium on Python

2  Asked on November 19, 2021 by nizariansyah-agung


Should Testers be called QA?

4  Asked on October 25, 2021 by jainam


Problem implicit wait with wait.until

1  Asked on October 25, 2021 by markus-pallasch


Ask a Question

Get help from others!

© 2023 All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP