SlideShare a Scribd company logo
July 2016
Using HttpWatch Plug-in with
Selenium Automation in Java
Sandeep Tol
Senior Architect, Wipro
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
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.
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
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;
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());
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;
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!");
}
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

More Related Content

What's hot (20)

PPTX
A guide to getting started with WebdriverIO
Nilenth Selvaraja
 
PPTX
Spring boot
Gyanendra Yadav
 
PPTX
Automation - web testing with selenium
Tzirla Rozental
 
PDF
Cypress - Best Practices
Brian Mann
 
PDF
Webdriver io presentation
João Nabais
 
PPT
Web Test Automation with Selenium
vivek_prahlad
 
PDF
Spring Interview Questions and Answers | Spring Tutorial | Spring Framework T...
Edureka!
 
PPTX
Selenium
Batch2016
 
PDF
Automation Testing using Selenium Webdriver
Pankaj Biswas
 
PPTX
Cypress Automation
Susantha Pathirana
 
PPTX
Selenium- A Software Testing Tool
Zeba Tahseen
 
PPT
Codeigniter
minhrau111
 
PPTX
WebdriverIO: the Swiss Army Knife of testing
Daniel Chivescu
 
PDF
Interview Question & Answers for Selenium Freshers | LearningSlot
Learning Slot
 
PPT
Selenium
Kalyan ch
 
PPTX
Python selenium
Ducat
 
PDF
Xpath in Selenium | Selenium Xpath Tutorial | Selenium Xpath Examples | Selen...
Edureka!
 
PPTX
Node js introduction
Joseph de Castelnau
 
PDF
PUC SE Day 2019 - SpringBoot
Josué Neis
 
PPTX
Selenium-4
Manoj Kumar Kumar
 
A guide to getting started with WebdriverIO
Nilenth Selvaraja
 
Spring boot
Gyanendra Yadav
 
Automation - web testing with selenium
Tzirla Rozental
 
Cypress - Best Practices
Brian Mann
 
Webdriver io presentation
João Nabais
 
Web Test Automation with Selenium
vivek_prahlad
 
Spring Interview Questions and Answers | Spring Tutorial | Spring Framework T...
Edureka!
 
Selenium
Batch2016
 
Automation Testing using Selenium Webdriver
Pankaj Biswas
 
Cypress Automation
Susantha Pathirana
 
Selenium- A Software Testing Tool
Zeba Tahseen
 
Codeigniter
minhrau111
 
WebdriverIO: the Swiss Army Knife of testing
Daniel Chivescu
 
Interview Question & Answers for Selenium Freshers | LearningSlot
Learning Slot
 
Selenium
Kalyan ch
 
Python selenium
Ducat
 
Xpath in Selenium | Selenium Xpath Tutorial | Selenium Xpath Examples | Selen...
Edureka!
 
Node js introduction
Joseph de Castelnau
 
PUC SE Day 2019 - SpringBoot
Josué Neis
 
Selenium-4
Manoj Kumar Kumar
 

Similar to Using HttpWatch Plug-in with Selenium Automation in Java (20)

ODP
Web Testen mit Selenium
openForce Information Technology GesmbH
 
PDF
Web driver selenium simplified
Vikas Singh
 
PDF
Selenium Full Material( apprendre Selenium).pdf
Sdiri Ahmed
 
PPTX
A Definitive Guide to Mastering Selenium WebDriver Automation Effectively.pptx
Matthew Allen
 
PDF
Selenium with testng and eclipse ide
Testertester Jaipur
 
PPTX
Selenium web driver
Roman Savitskiy
 
PPT
Steps to write Selenium
Rohit Thakur
 
PPTX
Web driver training
Dipesh Bhatewara
 
PDF
Intelligent Testing Tool: Selenium Web Driver
IRJET Journal
 
DOCX
Experienced Selenium Interview questions
archana singh
 
PDF
Selenium webdriver practical_guide
Chandini Kiran
 
PDF
Selenium for Tester.pdf
RTechRInfoIT
 
PDF
Selenium Introduction by Sandeep Sharda
Er. Sndp Srda
 
PDF
Learning selenium sample
Minnu Jayaprakash
 
PPTX
All levels of performance testing and monitoring in web-apps
Andrii Skrypnychenko
 
PDF
IRJET- Automatic Device Functional Testing
IRJET Journal
 
PDF
Getting Started with Selenium
Dave Haeffner
 
PDF
TAFs on WebDriver API - By - Pallavi Sharma.pdf
Pallavi Sharma
 
PDF
Selenium course training institute ameerpet hyderabad – Best software trainin...
Sathya Technologies
 
PDF
Selenium course training institute ameerpet hyderabad
Sathya Technologies
 
Web driver selenium simplified
Vikas Singh
 
Selenium Full Material( apprendre Selenium).pdf
Sdiri Ahmed
 
A Definitive Guide to Mastering Selenium WebDriver Automation Effectively.pptx
Matthew Allen
 
Selenium with testng and eclipse ide
Testertester Jaipur
 
Selenium web driver
Roman Savitskiy
 
Steps to write Selenium
Rohit Thakur
 
Web driver training
Dipesh Bhatewara
 
Intelligent Testing Tool: Selenium Web Driver
IRJET Journal
 
Experienced Selenium Interview questions
archana singh
 
Selenium webdriver practical_guide
Chandini Kiran
 
Selenium for Tester.pdf
RTechRInfoIT
 
Selenium Introduction by Sandeep Sharda
Er. Sndp Srda
 
Learning selenium sample
Minnu Jayaprakash
 
All levels of performance testing and monitoring in web-apps
Andrii Skrypnychenko
 
IRJET- Automatic Device Functional Testing
IRJET Journal
 
Getting Started with Selenium
Dave Haeffner
 
TAFs on WebDriver API - By - Pallavi Sharma.pdf
Pallavi Sharma
 
Selenium course training institute ameerpet hyderabad – Best software trainin...
Sathya Technologies
 
Selenium course training institute ameerpet hyderabad
Sathya Technologies
 
Ad

Recently uploaded (20)

PPTX
Agentforce World Tour Toronto '25 - Supercharge MuleSoft Development with Mod...
Alexandra N. Martinez
 
PDF
Future-Proof or Fall Behind? 10 Tech Trends You Can’t Afford to Ignore in 2025
DIGITALCONFEX
 
PPTX
Agentforce World Tour Toronto '25 - MCP with MuleSoft
Alexandra N. Martinez
 
PPTX
Future Tech Innovations 2025 – A TechLists Insight
TechLists
 
PPTX
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
PDF
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
DOCX
Cryptography Quiz: test your knowledge of this important security concept.
Rajni Bhardwaj Grover
 
PPTX
Digital Circuits, important subject in CS
contactparinay1
 
PDF
“Voice Interfaces on a Budget: Building Real-time Speech Recognition on Low-c...
Edge AI and Vision Alliance
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PDF
UiPath DevConnect 2025: Agentic Automation Community User Group Meeting
DianaGray10
 
PPTX
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
PPTX
Mastering ODC + Okta Configuration - Chennai OSUG
HathiMaryA
 
PDF
ICONIQ State of AI Report 2025 - The Builder's Playbook
Razin Mustafiz
 
PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
PPTX
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PDF
AI Agents in the Cloud: The Rise of Agentic Cloud Architecture
Lilly Gracia
 
PDF
NLJUG Speaker academy 2025 - first session
Bert Jan Schrijver
 
PDF
SIZING YOUR AIR CONDITIONER---A PRACTICAL GUIDE.pdf
Muhammad Rizwan Akram
 
Agentforce World Tour Toronto '25 - Supercharge MuleSoft Development with Mod...
Alexandra N. Martinez
 
Future-Proof or Fall Behind? 10 Tech Trends You Can’t Afford to Ignore in 2025
DIGITALCONFEX
 
Agentforce World Tour Toronto '25 - MCP with MuleSoft
Alexandra N. Martinez
 
Future Tech Innovations 2025 – A TechLists Insight
TechLists
 
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
Cryptography Quiz: test your knowledge of this important security concept.
Rajni Bhardwaj Grover
 
Digital Circuits, important subject in CS
contactparinay1
 
“Voice Interfaces on a Budget: Building Real-time Speech Recognition on Low-c...
Edge AI and Vision Alliance
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
UiPath DevConnect 2025: Agentic Automation Community User Group Meeting
DianaGray10
 
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
Mastering ODC + Okta Configuration - Chennai OSUG
HathiMaryA
 
ICONIQ State of AI Report 2025 - The Builder's Playbook
Razin Mustafiz
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
AI Agents in the Cloud: The Rise of Agentic Cloud Architecture
Lilly Gracia
 
NLJUG Speaker academy 2025 - first session
Bert Jan Schrijver
 
SIZING YOUR AIR CONDITIONER---A PRACTICAL GUIDE.pdf
Muhammad Rizwan Akram
 
Ad

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 ([email protected]) 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 ([email protected]) 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 ([email protected]) 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 ([email protected]) 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 ([email protected]) 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 ([email protected]) 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 ([email protected]) 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 ([email protected]) 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: [email protected]