The software testing industry has comes up with new techniques (like agile methodology) to decrease time-to-delivery while ensuring quality product deliverables at reduced cost and efforts. When compared to various application testing procedures, testing web apps is the trickiest one. The testers need to test applications on different browsers (which is difficult because there are many browsers in the market, and none can be sure of which browser user might use) by considering various parameters like integration, usability, UI, interoperability, and security. To increase efficiency and ease of testing web apps, Headless Browser Testing was developed.
What is Headless Browser Testing and What Does it Do?
Headless Browser Testing is a process of running the browser tests without the type of browser UI or GUI. In headless browser testing, to conduct cross-browser testing the tester can run test cases accurately and successfully without requiring the browser on which application needs to be tested. In a Continuous Integration environment, this testing methodology is beneficial to run tests because the scaling of continuous testing is done efficiently, as there is no one to observe the visuals.
This type of browser has access to all webpages and without displaying them to the user this browser can move the webpage content to another program. As the headless browser programs run in the backend, like usual browsers, users get nothing to see on the screen starting the headless browser. Even though no two browser’s implementations are the same, the headless browser can analyze and interpret webpages. This allows a headless browser to deliver the real browser perspective without demanding memory or cost incurred test cases with actual browser GUI.
The reason behind using a headless browser or carrying out headless testing is that they are faster than the normal browsers. Since you are not opening the browser GUI, you can ignore the time taken by a normal browser to load CSS, JavaScript and render HTML. With headless testing, you can observe 2x to 15x faster performance scaling. If performance is the critical aspect the testing process is aimed towards, then the headless browser may be a way to go.
Top Headless Browsers Available
Following are some of the browsers available for headless testing.
Puppeteer
Puppeteer is a Node.js library that provides a high-level API to control headless Chrome or Chromium developed by the chrome team. By default, Puppeteer is headless but can also be used with full Chrome or Chromium. It can be used to generate the screenshots and PDFs of web pages to test the Chrome Extensions and HTML responses.
HTML Unit
HTML Unit is a headless browser written in java code. It has JavaScript support that handles complex Ajax libraries. It supports the Cookies, HTML responses (clicking on hyperlinks, submitting forms, etc.), HTTPS security and basic HTTP authentication. Its most commonly used for testing purposes and sometimes even for getting information from web pages or downloading content from the websites.
HTML Unit is not a generic unit testing framework and is intended to be used within another testing framework such as Junit or testing. It is specifically a way to simulate a real browser like Chrome, Safari, Firefox, etc. for testing purposes.
Headless Firefox
For Firefox 56 or above versions, Mozilla Firefox offers headless testing. Instead of using some other tools to simulate browser environments, developers can now connect with inbuilt APIs provided within Mozilla to run Firefox in headless mode and test a variety of use cases. Headless Firefox is driven by Selenium, SlimmerJS and W3C WebDriver.
Even though most of the testers use Selenium as an API for conducting headless Firefox, it is tester can choose API of his choice and comfort for writing and executing basic unit tests.
Headless Chrome
Chrome version 59 or later supports headless mode. It carries all modern web platform features contributed by Chromium and the Blink rendering engine to the command line. With headless chrome, you can take screenshots, generate PDF for web pages and can handle web page interactions.
PhantomJS
PhantomJS is a headless browser scriptable with JavaScript API based on WebKit. It can be used for, Screenshots, Page Automation, Network Monitoring, to render dashboard screenshots for users, to run Unit tests on the command line and to gather the information from the web. But the maintenance of PhantomJS is suspended.
TrifleJS
TrifleJs is a headless Internet Explorer browser that uses the V8 Javascript engine to run the test scripts. The API is coded as a part of PhantomJS that is perfect for test automation. If you have knowledge of phantom, then you already know how to use TrifleJS.
When To use Headless Testing?
Headless testing guarantees a weightless, less resource-intensive, and scripted automation that executes rapidly. Instead of verifying every page manually for errors, you can just write a UI test and integrate it into your build process, then run it in the background.
Here are some of the scenarios where headless browser testing has to be preferred:
- Automate the HTML responses or web interactions like mouse-clicking, form submission, simulate keyboard input, etc.
- Handle Ajax calls and JavaScript execution.
- Generates screenshots and PDFs of webpages.
- Scrapes content and extracts the data from websites
- Monitors the Network
- No GUI hence less resource overhead.
- Since it interprets HTML and CSS like a real browser, it can be used to test the style of the elements such as page layouts like width and height of the page, ensuring the coordinates of an element or checking the font style or color etc.
- Simulating multiple browsers on a single machine without the resource overhead.
When Not To Consider Headless Browser Testing
Despite having a handful of reasons for using headless browser testing for better efficiency, there are certain situations where headless browser testing is not to be applied:
- Want to test as end-user
- The need to observe the test visually
- Debugging the browser in headless mode is quite complex
Conclusion
Headless browser testing is very helpful to developers before they commit their code so that they get the feedback quickly to give rapid fix at the early stage. Of course, Headless testing is not a universal testing solution. If you want to test the application visually you need a real browser. Headless Browser testing plays a major role when performance and time are crucial.
About Author
Swethana Inampudi works as a Test Engineer with V-Soft Consulting. In total, she has more than 3 years of experience in software testing profession. In her short span of career, she got a chance to get involved in some of the most challenging projects, which demanded great learning and skill. This need provided her a chance to learn and master various testing concepts, methodologies and tools. Of all testing methodologies and tools, her deep expertise is into: Manual Testing, Selenium Automation, Appium Mobile Automation for iOS and Android, Maven, Jenkins, GitLab, BitBucket and SauceLabs.