BrowserMob Proxy Selenium Java Tutorial with an Example!

In this post, we will learn BrowserMob Proxy Selenium Java test automation. The execution of web pages generally involves three tasks: fetching resources, page layout and rendering, and JavaScript execution. Apart from these, sometimes websites need to track user behaviors so they need many third-party integrations and this may affect page load time. Also, we can have different problems like javascript, instability, etc. We can filter all these things using BroserMob Proxy. We will go over how can we get performance-related data from selenium test scenarios & integrate them with browsermob proxy.

BrowserMob Proxy Outline

  • Page Load & Bandwith & Latency Relation
  • What is BrowserMob Proxy?
  • BrowserMob Features
  • What is HAR?
  • Creating Profile
  • Creating a Selenium project using BrowserMob
  • Chrome Developer Tools

Page Load & Bandwidth & Latency Relation

2016-04-01_00-12-09
(Picture from High-Performance Browser Networking)

Latency:  The time from the source sending a packet to the destination receiving it.

Bandwidth:  Maximum throughput of a logical or physical communication path.

What is BrowserMob Proxy?

BrowserMob Proxy is a free tool that supports monitoring and manipulating the network traffic from web applications. You can download it from https://github.com/lightbody/browsermob-proxy

On that page its definition is as follows: BrowserMob Proxy allows you to manipulate HTTP requests and responses, capture HTTP content, and export performance data as a HAR file. BMP works well as a standalone proxy server, but it is especially useful when embedded in Selenium tests.

Features of BrowserMob Proxy

The proxy is programmatically controlled via a REST interface or by being embedded directly inside Java-based programs and unit tests. It captures performance data in the HAR format. In addition, it can actually control HTTP traffic, such as:

  • Black-listing and white-listing certain URL patterns
  • Simulating various bandwidth and latency
  • Remapping DNS lookups
  • Flushing DNS caching
  • Automatic BASIC authorization

What is HAR?

The HAR format is based on JSON, as described in RFC 4627. Har is an open format for exporting HTTP tracing information called HTTP Archive (HAR).  The data is stored as a JSON document.

What kind of information we can get from har file:

  • DNS information load time
  • ​Each object requested (load time)
  • Connection time to the server
  • From server to a browser (load time)
  • The object is blocked or not

Some of HAR object types are log, creator, browser, pages, page timings, etc.

We can check har file results using different tools:

HAR viewer is a free and open-source (PHP + JavaScript) application, which you can host yourself.

2016-03-31_22-45-37

2016-03-31_22-47-47

The gem will start a local server and automatically open a browser tab to view the HAR file.

If you go to harviewer website, copy and past your .har file inside & you will get an interactive timeline.

2016-03-27_22-34-29

2016-03-31_22-56-50

 

2016-03-31_21-55-41

Part of my HAR file created by WebDriver.

{
  "log": {
    "version": "1.2",
    "creator": {
      "name": "BrowserMob Proxy",
      "version": "2.1.0-beta-2-littleproxy",
      "comment": ""
    },
    "browser": {
      "name": "Firefox",
      "version": "44.0",
      "comment": ""
    }
  }
}

You can format the file using Notepad++ json viewer plugin, or JSON viewer website, you can get more information about har specification from here.

Create a BrowserMob Proxy Selenium Java Project

You can add this to your 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>org.swtestacademy</groupId>
    <artifactId>browsermobproxy</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>net.lightbody.bmp</groupId>
            <artifactId>browsermob-core</artifactId>
            <version>2.1.5</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>22.0</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-jdk14</artifactId>
            <version>1.8.0-beta0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.7.1</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>2.53.1</version>
        </dependency>
    </dependencies>
</project>
import java.io.File;
import java.net.Inet4Address;
import lombok.SneakyThrows;
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.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestMethodOrder;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@TestMethodOrder(MethodOrderer.MethodName.class)
public class BrowserMobProxyExample {
    WebDriver             driver;
    BrowserMobProxyServer proxy;
    Proxy                 seleniumProxy;

    @SneakyThrows
    @BeforeAll
    public void setup() {
        //Proxy Operations
        proxy = new BrowserMobProxyServer();
        proxy.start(8080);
        seleniumProxy = ClientUtil.createSeleniumProxy(proxy);
        String hostIp = Inet4Address.getLocalHost().getHostAddress();
        seleniumProxy.setHttpProxy(hostIp + ":" + proxy.getPort());
        seleniumProxy.setSslProxy(hostIp + ":" + proxy.getPort());
        proxy.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);

        System.setProperty("webdriver.chrome.driver", "/usr/local/bin/chromedriver");
        System.setProperty("webdriver.chrome.whitelistedIps", "");
        DesiredCapabilities seleniumCapabilities = new DesiredCapabilities();
        seleniumCapabilities.setCapability(CapabilityType.PROXY, seleniumProxy);
        seleniumCapabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--disable-web-security");
        options.addArguments("--allow-insecure-localhost");
        options.addArguments("--ignore-urlfetcher-cert-requests");
        driver = new ChromeDriver(seleniumCapabilities);
    }

    @SneakyThrows
    @Test
    public void browserMobProxyTest() {
        proxy.newHar("google.com");
        driver.get("https://www.google.com");
        Thread.sleep(2000);

        Har har = proxy.getHar();
        File harFile = new File("google.har");
        har.writeTo(harFile);
    }

    @AfterAll
    public void teardown() {
        proxy.stop();
        driver.quit();
    }
}

check the location of the har file:

You can check the new browser mob proxy interface and its methods from this link 

Chrome Developer Tools

2016-03-21_21-11-35

  • Copy All as HAR: Copies all resources to the system clipboard as HAR data. A HAR file contains a JSON data structure.
  • Save as HAR with Content: Saves all network data to a HAR file along with each page resource.

2016-03-30_11-51-19

Chrome Developer Tools, go to the Network tab, and make sure you’ve selected the Preserve log checkbox, otherwise, the log is reset when you change the page.

Unfortunately with the latest selenium versions create problems. I tried all options to fix the problem but I could not. If you find a solution to run BrowserMobProxy with Selenium’s latest versions, please write a comment about that solution or you can create PR in github repo.

GitHub Project

https://github.com/swtestacademy/browsermobproxy

Thanks,
Onur Yazir

33 thoughts on “BrowserMob Proxy Selenium Java Tutorial with an Example!”

  1. I got the har file from browsermob but unable to convert that har file to JMX.
    Can you please provide me solution for the same.

    Reply
  2. When I tried convert Har to Jmx through blazemeter then it’s showing me “Fatal error during conversion:
    Failed to validate json file SeleniumEasy.har: check file format”.
    Also getting below error logs:

    2017/04/25 04:40:08 INFO – com.blazemeter.utils.Configuration: Configuration was loaded…
    2017/04/25 04:40:08 INFO – com.blazemeter.Main: Log file=/var/cache/tomcat8/temp/7nhbj8kaarnlk3jemcnttusson9067326786491721299/SeleniumEasy.log
    2017/04/25 04:40:08 INFO – com.blazemeter.Main: Input file=/var/cache/tomcat8/temp/7nhbj8kaarnlk3jemcnttusson9067326786491721299/SeleniumEasy.har
    2017/04/25 04:40:08 INFO – com.blazemeter.Main: Output file=/var/cache/tomcat8/temp/7nhbj8kaarnlk3jemcnttusson9067326786491721299/SeleniumEasy.jmx
    2017/04/25 04:40:08 INFO – com.blazemeter.utils.Utils: Trying to detect input file type vie mime_type….
    2017/04/25 04:40:08 INFO – com.blazemeter.utils.Utils: Detected input file type=text/html
    2017/04/25 04:40:08 ERROR – com.blazemeter.Main: Failed to start converting: com.github.fge.jsonschema.core.exceptions.ProcessingException: fatal: Failed to find jsonSchema for /var/cache/tomcat8/temp/7nhbj8kaarnlk3jemcnttusson9067326786491721299/SeleniumEasy.har
    level: “fatal”

    at com.blazemeter.utils.JsonFormatDetector.converterType(JsonFormatDetector.java:187)
    at com.blazemeter.utils.Utils.converterType(Utils.java:78)
    at com.blazemeter.utils.Utils.converter(Utils.java:187)
    at com.blazemeter.Main.main(Main.java:83)
    at com.blazemeter.Conversion$ConversionTask.call(Conversion.java:56)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

    Can you please help me on the same.

    Reply
    • It is better to ask Blazemeter support. :( This part has a problem. It can not find json schema.

      com.github.fge.jsonschema.core.exceptions.ProcessingException: fatal: Failed to find jsonSchema for /var/cache/tomcat8/temp/7nhbj8kaarnlk3jemcnttusson9067326786491721299/SeleniumEasy.har
      level: “fatal”

      Reply
  3. Thank you for your helpful Tutorial, I did as you explain but I get this it fail up in the first Test,

    AILED CONFIGURATION: @BeforeClass setup
    java.lang.NoSuchMethodError: com.google.common.io.Closeables.closeQuietly(Ljava/io/Closeable;)V
    at org.openqa.selenium.firefox.internal.ClasspathExtension.writeTo(ClasspathExtension.java:62)
    at org.openqa.selenium.firefox.FirefoxProfile.installExtensions(FirefoxProfile.java:527)
    at org.openqa.selenium.firefox.FirefoxProfile.layoutOnDisk(FirefoxProfile.java:505)
    at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:75)
    at org.openqa.selenium.firefox.FirefoxDriver.startClient(FirefoxDriver.java:149)
    at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:72)
    at org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:128)
    at org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:87)
    at com.proxy.BrowserMobProxy.MobProxy.setup(MobProxy.java:37)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
    at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:551)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:213)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:138)
    at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:175)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:107)
    at org.testng.TestRunner.privateRun(TestRunner.java:768)
    at org.testng.TestRunner.run(TestRunner.java:617)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
    at org.testng.SuiteRunner.run(SuiteRunner.java:240)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:87)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1188)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1113)
    at org.testng.TestNG.run(TestNG.java:1025)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)

    I need your help please ! Thank you

    Reply
  4. Thank your for yout answer I fixed this problem then I get exception on @Before test, The problem is surely in the seleniumCapabilities, it can’t accept this constructor driver = new FirefoxDriver(seleniumCapabilities);

    [TestNG] Running:
    C:\Users\Hamza Abkar\AppData\Local\Temp\testng-eclipse–1727457014\testng-customsuite.xml

    FAILED CONFIGURATION: @BeforeClass setup
    org.openqa.selenium.SessionNotCreatedException: InvalidArgumentError: Expected [object Undefined] undefined to be an integer
    Build info: version: ‘3.4.0’, revision: ‘unknown’, time: ‘unknown’
    System info: host: ‘LAPTOP-CE1IQ7E0’, ip: ‘192.168.1.95’, os.name: ‘Windows 10’, os.arch: ‘amd64’, os.version: ‘10.0’, java.version: ‘1.8.0_121’
    Driver info: driver.version: FirefoxDriver
    remote stacktrace: stack backtrace:
    0: 0x48916f –
    1: 0x489f59 –
    2: 0x439ced –
    3: 0x4473ea –
    4: 0x445128 –
    5: 0x41dbb1 –
    6: 0x407997 –
    7: 0x6bbb39 –
    8: 0x415b39 –
    9: 0x6b6043 –
    10: 0x7ffcdc038364 – 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$22(ProtocolHandshake.java:365)
    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:368)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:159)
    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:637)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:250)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:236)
    at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:137)
    at org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:191)
    at org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:108)
    at org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:137)
    at com.proxy.BrowserMobProxy.MobProxy.setup(MobProxy.java:43)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
    at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:551)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:213)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:138)
    at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:175)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:107)
    at org.testng.TestRunner.privateRun(TestRunner.java:768)
    at org.testng.TestRunner.run(TestRunner.java:617)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
    at org.testng.SuiteRunner.run(SuiteRunner.java:240)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:87)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1188)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1113)
    at org.testng.TestNG.run(TestNG.java:1025)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)

    SKIPPED CONFIGURATION: @AfterClass shutdown
    SKIPPED: teknosa_test1

    ===============================================
    Default test
    Tests run: 1, Failures: 0, Skips: 1
    Configuration Failures: 1, Skips: 1
    ===============================================

    ===============================================
    Default suite
    Total tests run: 1, Failures: 0, Skips: 1
    Configuration Failures: 1, Skips: 1
    ===============================================

    [TestNG] Time taken by [TestListenerAdapter] Passed:0 Failed:0 Skipped:0]: 22 ms
    [TestNG] Time taken by org.testng.reporters.XMLReporter@4909b8da: 13 ms
    [TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@60addb54: 87 ms
    [TestNG] Time taken by org.testng.reporters.jq.Main@614c5515: 58 ms
    [TestNG] Time taken by org.testng.reporters.JUnitReportReporter@6df97b55: 6 ms
    [TestNG] Time taken by org.testng.reporters.EmailableReporter@6537cf78: 5 ms

    Reply
  5. This worked flawlessly for me!

    package makemyhar;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.ArrayList;
    import net.lightbody.bmp.BrowserMobProxy;
    import net.lightbody.bmp.BrowserMobProxyServer;
    import net.lightbody.bmp.core.har.Har;
    import net.lightbody.bmp.proxy.CaptureType;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.phantomjs.PhantomJSDriver;
    import org.openqa.selenium.phantomjs.PhantomJSDriverService;
    import org.openqa.selenium.remote.CapabilityType;
    import org.openqa.selenium.remote.DesiredCapabilities;

    public class MakeMyHAR {
    public static void main(String[] args) throws IOException, InterruptedException {

    //BrowserMobProxy
    BrowserMobProxy server = new BrowserMobProxyServer();
    server.start(0);
    server.setHarCaptureTypes(CaptureType.getAllContentCaptureTypes());
    server.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);
    server.newHar(“Google”);

    //PHANTOMJS_CLI_ARGS
    ArrayList cliArgsCap = new ArrayList();
    cliArgsCap.add(“–proxy=localhost:”+server.getPort());
    cliArgsCap.add(“–ignore-ssl-errors=yes”);

    //DesiredCapabilities
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
    capabilities.setCapability(CapabilityType.SUPPORTS_JAVASCRIPT, true);
    capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, cliArgsCap);
    capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY,”C:\\phantomjs.exe”);

    //WebDriver
    WebDriver driver = new PhantomJSDriver(capabilities);
    driver.get(“https://www.google.co.in/”);

    //HAR
    Har har = server.getHar();
    FileOutputStream fos = new FileOutputStream(“C:\\HAR-Information.har”);
    har.writeTo(fos);
    server.stop();
    }
    }

    Reply
  6. I want to you browsermobproxy in TESTNG such that in @BeforeSuite annotation/method , it will get started and n @AfterSuite annotation/ method, it will get closed.

    How can I meet my requirement ?

    Reply
  7. I want to run Browsermobproxy tool in windows 7 and Mac with selenium cucumber. please some one help how to setup Browsemobproxy and integrate with selenium cucumber

    Reply
  8. Hi guys, i’m currently using the browsermob, and i’m tracking the mixed content URL but the browsermob did not return any mixed content. mixed content are url that was is http. Right now, our website was migrated to https. Please response, thanks

    Reply
  9. hi onur baskirt
    can u please write an code that asserts two values in network tap using java in selenium .
    i have an requirement like ,
    consider two strings(json format) that are in different links , we need to compare them whether they are equal or not.

    Reply
  10. Hi Onur,
    This is not working could u please check and fix.

    import java.io.File;
    import java.io.IOException;
    import java.net.Inet4Address;
    import java.net.InetAddress;
    import java.net.UnknownHostException;
    import java.util.Collections;
    import java.util.List;

    import net.lightbody.bmp.BrowserMobProxyServer;
    import net.lightbody.bmp.client.ClientUtil;
    import net.lightbody.bmp.core.har.Har;
    import net.lightbody.bmp.core.har.HarEntry;
    import net.lightbody.bmp.proxy.CaptureType;
    import org.openqa.selenium.Proxy;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.chrome.ChromeOptions;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.remote.CapabilityType;
    import org.openqa.selenium.remote.DesiredCapabilities;
    import org.xbill.DNS.Options;

    public class MobProxy {
    public static WebDriver driver;
    public static BrowserMobProxyServer proxy;

    public static void main(String[] args){

    System.setProperty(“webdriver.chrome.driver”,”D:\\Projects\\chromedriver.exe”);
    //System.setProperty(“webdriver.gecko.driver”,”D:\\Projects\\geckodriver.exe”);
    proxy = new BrowserMobProxyServer();
    proxy.setTrustAllServers(true);
    proxy.start(0);

    Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy);

    try {
    String hostIp = InetAddress.getLocalHost().getHostAddress();
    seleniumProxy.setHttpProxy(hostIp + “:” + proxy.getPort());
    seleniumProxy.setSslProxy(hostIp + “:” + proxy.getPort());
    System.out.println(hostIp + “:” + proxy.getPort());
    } catch (UnknownHostException e) {
    e.printStackTrace(); }

    ChromeOptions chromeOptions1 = new ChromeOptions();
    chromeOptions1.addArguments(“test-type”);
    chromeOptions1.addArguments(“disable-notifications”);
    chromeOptions1.addArguments(“disable-infobars”);
    chromeOptions1.addArguments(“start-maximized”);
    chromeOptions1.setExperimentalOption(“useAutomationExtension”, false);
    chromeOptions1.setExperimentalOption(“excludeSwitches”,Collections.singletonList(“enable-automation”));
    DesiredCapabilities seleniumCapabilities = new DesiredCapabilities();
    seleniumCapabilities.setCapability(CapabilityType.PROXY, seleniumProxy);
    seleniumCapabilities = DesiredCapabilities.chrome();
    seleniumCapabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
    seleniumCapabilities.setCapability(ChromeOptions.CAPABILITY, chromeOptions1);
    driver=new ChromeDriver(seleniumCapabilities);
    //driver=new FirefoxDriver(seleniumCapabilities);

    proxy.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);

    try {

    proxy.newHar();

    driver.get(“http://www.swtestacademy.com”);
    try {
    Thread.sleep(10000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }

    System.out.println(“Entered”);
    /*
    * List entries = proxy.getHar().getLog().getEntries(); for (HarEntry
    * entry : entries) { System.out.println(entry.getRequest().getUrl()); }
    */

    System.out.println(“passed”);

    Har har = proxy.getHar();
    File harFile = new File(“academy.har”);
    har.writeTo(harFile);
    } catch (IOException ioe) {
    ioe.printStackTrace();
    }

    proxy.stop();
    driver.quit();
    }
    }

    Reply
  11. Hi Onur Baskirt,

    I have a scenario here to get help from you. After few navigation on UI I need to get the some API response from the browser network and do verify the some value in the response.

    How to get the specific API response from the har logs in java.
    OR
    is there any other to get the required API response from the browser network tab.?

    Reply

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.