4

I’m trying to save JAR-content into my local drive using Selenium Java UI script. When I try to do that, I’m receiving some set of errors. I went through several blocks, and I have updated the Guava JAR-file to the latest version, but still have no success.

Code Snippet:

public static void main(String[] args) {
    System.out.println("Hi");

    ChromeOptions options = new ChromeOptions();
    BrowserMobProxy proxy = new BrowserMobProxyServer();
    proxy.start(8080);

    Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy);

    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability(CapabilityType.PROXY, seleniumProxy);
    capabilities.setCapability(ChromeOptions.CAPABILITY, options);

    System.setProperty("webdriver.chrome.driver", "D:\\Selenium Files\\chromedriver_win32 (3)\\chromedriver.exe");
    @SuppressWarnings("deprecation")
    WebDriver driver = new ChromeDriver(capabilities);

    driver.manage().window().maximize();

    proxy.newHar("test");
    driver.get("https://google.com");

    proxy.stop();
}

Error:

07:43:43.059 [LittleProxy-0-ClientToProxyWorker-4] ERROR org.littleshoot.proxy.impl.ClientToProxyConnection - (AWAITING_INITIAL) [id: 0xca565cec, L:/192.168.1.4:8080 - R:/192.168.1.4:62453]: Caught an exception on ClientToProxyConnection
java.lang.NoSuchMethodError: com.google.common.net.HostAndPort.getHostText()Ljava/lang/String;
    at org.littleshoot.proxy.impl.ProxyToServerConnection.addressFor(ProxyToServerConnection.java:954) ~[browsermob-dist-2.1.4.jar:?]
    at org.littleshoot.proxy.impl.ProxyToServerConnection.setupConnectionParameters(ProxyToServerConnection.java:832) ~[browsermob-dist-2.1.4.jar:?]
    at org.littleshoot.proxy.impl.ProxyToServerConnection.<init>(ProxyToServerConnection.java:199) ~[browsermob-dist-2.1.4.jar:?]
    at org.littleshoot.proxy.impl.ProxyToServerConnection.create(ProxyToServerConnection.java:173) ~[browsermob-dist-2.1.4.jar:?]
    at org.littleshoot.proxy.impl.ClientToProxyConnection.doReadHTTPInitial(ClientToProxyConnection.java:284) ~[browsermob-dist-2.1.4.jar:?]
    at org.littleshoot.proxy.impl.ClientToProxyConnection.readHTTPInitial(ClientToProxyConnection.java:191) ~[browsermob-dist-2.1.4.jar:?]
    at org.littleshoot.proxy.impl.ClientToProxyConnection.readHTTPInitial(ClientToProxyConnection.java:80) ~[browsermob-dist-2.1.4.jar:?]
    at org.littleshoot.proxy.impl.ProxyConnection.readHTTP(ProxyConnection.java:135) ~[browsermob-dist-2.1.4.jar:?]
    at org.littleshoot.proxy.impl.ProxyConnection.read(ProxyConnection.java:120) ~[browsermob-dist-2.1.4.jar:?]
    at org.littleshoot.proxy.impl.ProxyConnection.channelRead0(ProxyConnection.java:587) ~[browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) ~[browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:373) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:359) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:351) [browsermob-dist-2.1.4.jar:?]
    at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:266) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:373) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:359) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:351) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86) [browsermob-dist-2.1.4.jar:?]
    at org.littleshoot.proxy.impl.ProxyConnection$RequestReadMonitor.channelRead(ProxyConnection.java:715) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:373) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:359) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:351) [browsermob-dist-2.1.4.jar:?]
    at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293) [browsermob-dist-2.1.4.jar:?]
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:373) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:359) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:351) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86) [browsermob-dist-2.1.4.jar:?]
    at org.littleshoot.proxy.impl.ProxyConnection$BytesReadMonitor.channelRead(ProxyConnection.java:692) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:373) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:359) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:351) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:373) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:359) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:129) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:651) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:574) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:488) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:450) [browsermob-dist-2.1.4.jar:?]
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:873) [browsermob-dist-2.1.4.jar:?]
    at java.lang.Thread.run(Thread.java:834) [?:?]

I have configured the following JAR files in my Project.

Screenshot of JAR dependencies (1)

Screenshot of JAR dependencies (2)

ib.
  • 25,324
  • 10
  • 71
  • 97
Shankar
  • 51
  • 3
  • It would be good to share pom file you are using for the dependencies, in case you are using Maven project. I can not see selenium jars in the list and also there are other unnecessary jars which are not related to this code can be removed. May be you can start with a small Maven project with all required dependencies and later merge it in your final project it will be easier to debug that way. – Sariq Shaikh Apr 15 '20 at 08:32

1 Answers1

1

As mentioned there are many missing pieces in your question such as selenium version etc. also there are no. of supporting jar which might be for your whole project. You can create a separate project to make browsermobproxy work to capture HAR file and than merge it to your actual project. Below is my code which works with described pom configuration.

    // start the proxy
    BrowserMobProxy proxy = new BrowserMobProxyServer();
    proxy.setTrustAllServers(true);
    proxy.start(0);

    // get the Selenium proxy object
    Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy);
    seleniumProxy.setSslProxy("localhost:" + proxy.getPort());

    // configure it as a desired capability
    DesiredCapabilities capabilities = DesiredCapabilities.chrome();
    capabilities.setCapability(CapabilityType.PROXY, seleniumProxy);

    //add chrome options to ignore certificate errors for https 
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--ignore-certificate-errors");

    // replace 'directory' with a suitable temp dir on your filesystem
    options.addArguments("--user-data-dir=/home/shariq/newchrome");
    capabilities.setCapability(ChromeOptions.CAPABILITY, options);

    //prepare chromedriver service required for latest selenium
    ChromeDriverService service = new ChromeDriverService.Builder()
            .usingAnyFreePort()
            .build();

    //setup driver
    ChromeDriver driver = new ChromeDriver(service, options);

    // enable more detailed HAR capture, if desired (see CaptureType for the complete list)
    proxy.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);

    // create a new HAR with the label "google.com"
    proxy.newHar("google.com");

   // open google.com
    driver.get("https://google.com");

    // get the HAR data
    Har har = proxy.getHar();
    har.writeTo(new File("/home/shariq/Downloads/google.com.har"));
    proxy.stop();
    driver.close();

POM Dependencies:

<dependencies>
    <dependency>
        <groupId>net.lightbody.bmp</groupId>
        <artifactId>browsermob-core</artifactId>
        <version>2.1.5</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>3.141.59</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.30</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>28.2-jre</version>
    </dependency>
</dependencies>
Sariq Shaikh
  • 1,045
  • 8
  • 24