TransWikia.com

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

https://sqa.stackexchange.com/a/37318/9043

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.start(0);
Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy);


proxy.addRequestFilter((request, contents, messageInfo)->{
    request.headers().add("some-header-attribute", "RandomeValue");
    System.out.println(request.headers().entries().toString());
    return null;
});

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

seleniumProxy.setProxyType(Proxy.ProxyType.MANUAL);
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();
options.addArguments(proxyOption);

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
driver.get("chrome-extension://idgpnmonknjnojddfkpgkljpfnnfcklj/_generated_background_page.html");

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

.

   ((Javascript)driver).executeScript(
         "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.

    driver.get("your-desired-website");

Answered by Praveen on August 10, 2020

Add your own answers!

Ask a Question

Get help from others!

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