I using Java with selenium and I want to use browsermob: I using same code for different browsers e.g. firefox:
BrowserMobProxyServer proxyServer = new BrowserMobProxyServer();
proxyServer.start();
proxyServer.setHarCaptureTypes(CaptureType.getAllContentCaptureTypes());
proxyServer.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);
Proxy proxy = ClientUtil.createSeleniumProxy(proxyServer);
DesiredCapabilities dccFirefox = DesiredCapabilities.firefox();
dccFirefox.setCapability(CapabilityType.PROXY, proxy);
this.driver = new FirefoxDriver(dccFirefox);
Occurs error in Firefox:
org.openqa.selenium.SessionNotCreatedException: InvalidArgumentError: Expected [object Undefined] undefined to be an integer
Build info: version: '3.5.1', revision: '9c21bb67ef', time: '2017-08-17T15:26:08.955Z'
System info: host: 'BEN-PLL-ST1-HP', ip: '192.168.1.9', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_141'
Driver info: driver.version: FirefoxDriver
remote stacktrace: stack backtrace:
0: 0x4bb74f - <no info>
1: 0x4bbea9 - <no info>
2: 0x43ce8d - <no info>
3: 0x44ce14 - <no info>
4: 0x44944a - <no info>
5: 0x4203e1 - <no info>
6: 0x407dc7 - <no info>
7: 0x6d95b9 - <no info>
8: 0x4173a7 - <no info>
9: 0x6d38b3 - <no info>
10: 0x775559cd - BaseThreadInitThunk
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$new$0(W3CHandshakeResponse.java:57)
at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$getResponseFunction$2(W3CHandshakeResponse.java:104)
at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$24(ProtocolHandshake.java:360)
at java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
at java.util.Spliterators$ArraySpliterator.tryAdvance(Unknown Source)
at java.util.stream.ReferencePipeline.forEachWithCancel(Unknown Source)
at java.util.stream.AbstractPipeline.copyIntoWithCancel(Unknown Source)
at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.util.stream.FindOps$FindOp.evaluateSequential(Unknown Source)
at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.util.stream.ReferencePipeline.findFirst(Unknown Source)
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:363)
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:137)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:142)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:641)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:254)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:236)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:137)
at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:191)
at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:103)
at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:137)
Chrome open normaly but pages can not be open, in console occurs error:
Failed to load resource: net::ERR_EMPTY_RESPONSE
net::ERR_PROXY_CONNECTION_FAILED
Someone have any idea why this errors occurs?
There is a open a issue with Geckodriver which is causing this issue. https://github.com/mozilla/geckodriver/issues/764
You can get a workaround by using below code.
Edit-1
Since geckodriver the untrusted setting has changed. So updated the code to accommodate the same
import net.lightbody.bmp.BrowserMobProxyServer;
import net.lightbody.bmp.client.ClientUtil;
import net.lightbody.bmp.core.har.Har;
import net.lightbody.bmp.proxy.CaptureType;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.io.File;
import java.io.IOException;
/**
* Created by tarun.lalwani on 5/31/17.
*/
public class TestApp {
public static void main(String [] args) {
BrowserMobProxyServer proxyServer = new BrowserMobProxyServer();
proxyServer.start();
proxyServer.setHarCaptureTypes(CaptureType.getAllContentCaptureTypes());
proxyServer.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);
Proxy proxy = ClientUtil.createSeleniumProxy(proxyServer);
FirefoxProfile profile = new FirefoxProfile();
DesiredCapabilities cap = new DesiredCapabilities();
cap.setAcceptInsecureCerts(true);
String host = proxy.getHttpProxy().split(":")[0];
int port = Integer.parseInt(proxy.getHttpProxy().split(":")[1]);
profile.setPreference("network.proxy.type", 1);
profile.setPreference("network.proxy.http", host);
profile.setPreference("network.proxy.http_port", port);
profile.setPreference("network.proxy.ssl", host);
profile.setPreference("network.proxy.ssl_port", port);
profile.setPreference("acceptInsecureCerts", true);
cap.setCapability(FirefoxDriver.PROFILE, profile);
FirefoxDriver driver = new FirefoxDriver(cap);
proxyServer.newHar("mysite");
driver.get("http://google.com");
Har har = proxyServer.getHar();
try {
har.writeTo(new File("har.json"));
} catch (IOException e) {
e.printStackTrace();
}
driver.quit();
}
}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test1</groupId>
<artifactId>test2</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>net.lightbody.bmp</groupId>
<!-- To use the legacy, Jetty-based implementation,
change the artifactId to browsermob-core -->
<artifactId>browsermob-core-littleproxy</artifactId>
<version>2.1.0-beta-6</version>
<scope>test</scope> </dependency>
<dependency>
<groupId>net.lightbody.bmp</groupId>
<artifactId>browsermob-core-littleproxy</artifactId>
<version>2.1.0-beta-5</version>
</dependency>
</dependencies>
</project>