This article will give the developers and testers to use Java programming for capturing IE browser HTTP logs using HTTP Watch Plug-in (V10) , in Selenium scripts
HTTP Watch comes with inbuilt API support to integrate with selenium scripts written in C# or PHP scripts . Refer http://apihelp.httpwatch.com/#Automation%20Overview.html
But unfortunately they don’t have API written for JAVA. There are no samples or articles available to use Httpwtach with Java interface.
Using this article you would learn how HttpWatch plug-in which component can be easily interfaced with Java code and then executed via selenium script.
The solution is to use Java COM bridge and invoke HTTP Watch plugin API from Java based selenium scripts.
Using HttpWatch Plug-in with Selenium Automation in Java
1. July 2016
Using HttpWatch Plug-in with
Selenium Automation in Java
Sandeep Tol
Senior Architect, Wipro
2. HTTPWatch Plugin automation with Java
Sandeep Tol (sandeep.tol@outlook.com) Page 2
Using HttpWatch Plug-in with Selenium
Automation in Java
Selenium framework allows to simulate real browser like Internet explorer, Chrome or Firefox and
automate the execution of user navigations via scripts in the browser. There are enormous articles,
tutorials available on automation with selenium. However there is focus given for capturing web page
performance KPIs,page load times & Browser HTTP network logs during such Selenium test runs.
This article will give the developers and testers to use Java programming for capturing IE
browser HTTP logs using HTTP Watch Plug-in (V10) , in Selenium scripts
This article would help developers/Testers to write selenium scripts with capturing HTTP log data
using HTTPWatch plugin, capture performance KPI of pages and automate in detection of web
performance issues. Automation is key to successful implementation of Next gen architecture that
uses Devops or Agile methods .Using selenium for web applications ,we can automate testing and
measure ,detect web page performance issues early in lifecycle and save manual tasking effort and
reduce performance defect Developer/Performance engineer can work on fixing the issues quickly &
achieve the agile benefits.
Key Takeaways from this article
Currently there is no Java API available to interface Http Watch plug-in API. solution given in
this article show how to use HTTP Watch browser plug-in ,collect logs and measure page
perfromance.
Use this knowledge to Automate performance analysis and testing for Agile Projects
Learn developing Java selenium scripts for Internet Explorer and Firefox
You can write a script to automate simulation of Http Watch plugin for Recording ,Stopping
and Logging for transactions
Learn how to measure webpage performance java /selenium code
Build or enhance existing automation frameworks for Performance analysis
Download the code from GitHub to start running sample
You would gain knowledge on developing Java interfaces for Microsoft Browser plugins with
Java COM bridge
About HttpWatch
HttpWatch browser plug-in helps to measure Performance of web pages like Page Load time,
Number of Javaacript files, Number of CSS files, Number of HTTP Errors, Number of requests etc
in Internet Explorer or Firefox . HTTP Watch is external plug-in available in Basic & professional
edition for Internet explorer to capture HTTP logs. One can also buy Professional Edition that comes
with more features for detailed analysis. However for detecting basic webpage issues, free edition is
enough!
It would help Performance Architects/Engineers/Developers to analyze the Client Side performance
Issues and fix them . HTTP Watch is best available plug-in to captures network traffic with Internet
Explorer. It’s very easy to use and one can manually capture detailed Network logs for all web page
transactions. The Performance KPI that you can measure include
3. HTTPWatch Plugin automation with Java
Sandeep Tol (sandeep.tol@outlook.com) Page 3
Onload time,
Tmechart View ( Which objects take time in loading, Sequential/Parallel calls, Ajax calls)
Bytes Sent
Bytes Received,
Number of HTTP requests made from Browser,
Server Time and Client Time ( With manual introspection)
HTTP Request Types ( GET, POST, 200 ,304,404 etc)
HTTP Errors.
Size of components ( Images, CSS, JS, Flash etc)
HTTP Headers data / Request Data/ JSON request Data/ Content sent & received in browser (
Professional Edition)
Warnings ( Professional Edition)
Picture 1: Screenshot showing HttpWatch Network logs captured Manually in IE browser
But when we talk on real browser automation using selenium, we need mechanisms to capture
such browser HTTP logs in automated fashion.
Java Interfacing for Http Watch Plugin
HTTP Watch comes with inbuilt API support to integrate with selenium scripts written in C# or PHP
scripts . Refer http://apihelp.httpwatch.com/#Automation%20Overview.html
But unfortunately they don’t have API written for JAVA. There are no samples or articles
available to use Httpwtach with Java interface.
Using this article you would learn how HttpWatch plug-in which component can be easily interfaced
with Java code and then executed via selenium script.
The solution is to use Java COM bridge and invoke HTTP Watch plugin API from Java based
selenium scripts.
4. HTTPWatch Plugin automation with Java
Sandeep Tol (sandeep.tol@outlook.com) Page 4
HttpWatch Plugin
-Record
-Stop
-Log
Java Selenium Code
JavaComBridge
Pages Summary
-Load Times, URL Data
- Content Sizes (CSS/JSS,IMG
sizes) , Save Log files
HWL Files
( Log files)
Java Based HttpWatch Automation with
Selenium
Controller
Picture 2: Component View of interfacing with Java
Step 1 :
Download and install HTTPwatch plug-in for IE in your system. You can download here download
Ensure that latest Install JRE or JDK is available on system
Step 2 :
Download COM Bridge https://java.net/projects/com4j/downloads and unzip files . There are few
other commercial java com bridge available. But I found the above one is good and efficient . You
can also refer to tutorial on converting various COM objects into Java interfaces here.
https://com4j.java.net/tutorial.html
Step 3 :
Open “Command Prompt” and navigate to the folder where you have extracted Com4J files .
Copy HTTPWatchx64.dll ( for 32 bit Windows it would be httpwatch.dll) from HTTPwatch plugin
installation folder to same folder where COM4J files are extracted. On Windows the HTTPwatch
would be installed in C:Program Files (x86)HttpWatch
5. HTTPWatch Plugin automation with Java
Sandeep Tol (sandeep.tol@outlook.com) Page 5
Picture 3: Screenshot of folder structure
Step 4 :
Convert COM component to Java API
Execute following command
Java – jar tlbimp.jar -o <outputFolder> –p <packagename> DLL file
Below command would generate files in “output” folder
Java – jar tlbimp.jar -o outputFolder –p com.httpwatch httpwatchx64.dll
Picture 4: Screenshot of command Line
This will create Java API classes like below
Picture 5: Screenshot of files generated
Now you can use these API in Selenium to automate httpwatch log capturing and displaying
performance metrics
Java Selenium Code with Http Watch Plugin
Now you can use these API in Selenium to automate httpwatch log capturing and displaying
performance metrics .
Include the httpwatch API that was generated into selenium project. Below is the code for simulating
IE browser with HTTPWatch
package myauto;
import java.io.File;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
6. HTTPWatch Plugin automation with Java
Sandeep Tol (sandeep.tol@outlook.com) Page 6
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
import com.httpwatch.*;
public class SeleniumIEHttpwatch {
public static void main(String[] args) {
// Create a new instance of the Firefox driver
// Notice that the remainder of the code relies on the interface,
// not the implementation.
File file = new File("C:/<path to IE Driver>/IEDriverServer.exe");
System.setProperty("webdriver.ie.driver", file.getAbsolutePath());
DesiredCapabilities capabilitiesIE = DesiredCapabilities.internetExplorer();
capabilitiesIE.setCapability(
InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
WebDriver driver = new InternetExplorerDriver(capabilitiesIE);
IController controller = ClassFactory.createController();
driver.manage().window().maximize();
// And now use this to visit Google
driver.get("http://www.google.com");
// Alternatively the same thing can be done like this
// driver.navigate().to("http://www.google.com");
// Check the title of the page
System.out.println("Page title is: " + driver.getTitle());
String title = driver.getTitle();
Plugin plugin = controller.attachByTitle(title);
// Find the text input element by its name
//WebElement element = driver.findElement(By.name("q"));
WebElement element =
driver.findElement(By.xpath("//input[@name='q']"));
// Enter something to search for
element.sendKeys("Cheese!");
//start recording the data for transaction
plugin.record();
// Now submit the form. WebDriver will find the form for us from the element
element.submit();
controller.wait_(plugin, -1);
//stop recording for transaction
plugin.stop();
/*Get the Summary of Performance KPI*/
Summary summary = plugin.log().pages(0).entries().summary();
System.out.println(" Summary Time" + summary.time());
System.out.println( "Total time to load page (secs): " +
summary.time());
System.out.println( "Number of bytes received on network: " +
summary.bytesReceived());
System.out.println( "HTTP compression saving (bytes): " +
summary.compressionSavedBytes());
System.out.println( "Number of round trips: " +
summary.roundTrips());
System.out.println( "Number of errors: " +
summary.errors().count());
// Check the title of the page
System.out.println("Page title is: " + driver.getTitle());
7. HTTPWatch Plugin automation with Java
Sandeep Tol (sandeep.tol@outlook.com) Page 7
// Save the log file
plugin.log().save("C:/Users/sande_000/Desktop/PE Work/sandytest.hwl");
// Google's search is rendered dynamically with JavaScript.
// Wait for the page to load, timeout after 10 seconds
(new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver d) {
return d.getTitle().toLowerCase().startsWith("cheese!");
}
});
// Should see: "cheese! - Google Search"
System.out.println("Page title is: " + driver.getTitle());
//Close the browser
driver.quit();
}
}
The Execution Console Output will look like this
Auto generated HWL File would like this. You can also export this content to CSV format
Picture 6: Auto generated HWL file
If you would like to simulate the HTTP Watch with Mozilla Firefox . Below is the code .There are few
minor modifications needed to invoke HTTPWatch plugin . Please note the HTTPwatch plugin
(v10) only works for Firefox version 35 and below
package myauto;
import java.io.File;
import java.io.IOException;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
8. HTTPWatch Plugin automation with Java
Sandeep Tol (sandeep.tol@outlook.com) Page 8
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
import com.httpwatch.*;
public class SeleniumFirefoxHttpWatch {
public static void main(String[] args) {
// Create a new instance of the Firefox driver
// Notice that the remainder of the code relies on the interface,
// not the implementation.
IController controller = ClassFactory.createController();
FirefoxProfile profile = new FirefoxProfile();
// FireBug,NetExport,Modify Headers xpi
File httpwatch = new File("C:Program Files (x86)HttpWatchFirefox");
profile.setEnableNativeEvents(false);
try {
profile.addExtension(httpwatch);
} catch (IOException err) {
System.out.println(err);
}
WebDriver driver = new FirefoxDriver(profile);
driver.manage().window().maximize();
// And now use this to visit Google
driver.get("http://www.google.com");
// Alternatively the same thing can be done like this
// driver.navigate().to("http://www.google.com");
String title = driver.getTitle();
System.out.println(" Title1 - " + title);
// Plugin plugin = controller.firefox().attach("default");
Plugin plugin = controller.attachByTitle(title);
// Find the text input element by its name
WebElement element = driver.findElement(By.name("q"));
// Enter something to search for
element.sendKeys("Cheese!");
plugin.record();
// Now submit the form. WebDriver will find the form for us from the
// element
element.submit();
controller.wait_(plugin, -1);
plugin.stop();
Summary summary = plugin.log().pages(0).entries().summary();
System.out.println(" Summary Time" + summary.time());
System.out.println("Total time to load page (secs): " +
summary.time());
System.out.println("Number of bytes received on network: " +
summary.bytesReceived());
System.out.println("HTTP compression saving (bytes): " +
summary.compressionSavedBytes());
System.out.println("Number of round trips: " +
summary.roundTrips());
System.out.println("Number of errors: " +
summary.errors().count());
// Check the title of the page
System.out.println("Page title is: " + driver.getTitle());
// Google's search is rendered dynamically with JavaScript.
// Wait for the page to load, timeout after 10 seconds
(new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>()
{
public Boolean apply(WebDriver d) {
return d.getTitle().toLowerCase().startsWith("cheese!");
}
9. HTTPWatch Plugin automation with Java
Sandeep Tol (sandeep.tol@outlook.com) Page 9
});
// Should see: "cheese! - Google Search"
System.out.println("Page title is: " + driver.getTitle());
// Close the browser
driver.quit();
}
}
Download Article Project from GiHub
https://github.com/sandeeptol1/SampleJavaHttpWatchAutomation
Conclusion
Software Test Automation is brining lot of innovative tools and techniques to automate manual testing
and reduce testing efforts. Especially in Agile Projects or Next gen architectures, automation is the
key to successful project implementations. Many Enterprises are using automated scripts for Junit
tests, Selenium Web browser Tests in their CI/CD ( Continuous Integration) frameworks to reduce
cycle time and manual efforts on Unit testing, Browser testing & regression testing . Automation is
“mantra” in nexgen architecture.
Selenium can be used for automating regression tests and browser based tests or Website
comparison tests against competition. Using above techniques httplogs can also be collected during
such tests . This data can be stored in some database or files and can be shown in dashboards to
view website performance
References
1. HTTPWatch API http://apihelp.httpwatch.com/#Automation%20Overview.html
2. COM 4 Java https://com4j.java.net/tutorial.html
3. Selenium Webdriver http://www.seleniumhq.org/projects/webdriver/
About the Author
Sandeep Tol is Senior Architect at Wipro, with 17 years of technology experience spanning across
Java J2EE applications, Web Portals, SOA platforms, Digital, Mobile, Cloud architectures &
Performance Engineering .Certified in TOGAF 9, written various whitepapers published on
architecture and quality governance.
Has Special Interest in Test Automation and Performance Engineering .Developed and implemented
various performance engineering automation tools,’ left shift strategies to various customers
https://www.linkedin.com/in/sandeeptol
email: sandeep.tol@outlook.com