Web browsers are an integral part of the UI automation using Selenium WebDriver.
Launching a browser and then executing the test cases on the browsers are an essential part of the web automation testing. But when we run the Selenium tests on any of the browsers, we generally face some challenges such as slow rendering on the browser, interference of other applications running on the system, etc. Apart from these, the major of the CI systems these days are Non-UI (such as Unix based systems). Therefore, for running the test cases on those systems, we need a way to run the test cases in a Non-UI mode- the solution to these situations is in running “headless” testing.
What is Selenium headless mode?
Headless testing is simply running your Selenium tests using a headless browser. It operates as your typical browser would, but without a user interface, making it excellent for automated testing.
A headless browser is a term used to define browser simulation programs that do not have a GUI - a web browser without a graphical user interface.
Headless browsers provide automated control of a web page in an environment similar to popular web browsers, but they are executed via a command-line interface or using network communication.
There are various Headless Browsers available. Enlisted below are some examples:
· Html Unit Browsers
· Firefox
· Chrome
· PhantomJS
· NodeJS
Let us consider Chrome for example:
To run a headless chrome browser, you just have to add the flag” –headless” when you launch the browser to be in headless mode.
// create object of chrome options
ChromeOptions options = new ChromeOptions();
// add the headless argument
options. addArguments("--headless");
// pass the options parameter in the Chrome driver declaration
WebDriver driver = new ChromeDriver(options);
With CLI (Command Line Interface), just write:
chrome \<br> – headless \ # Runs Chrome in headless mode
What is the difference between Chrome and headless Chrome?
Headless mode is not to run your program faster but headless mode makes your system memory utilization less and so better performance while execution. 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.
One of the benefits of using Headless Chrome (as opposed to testing directly in Node) is that your JavaScript tests will be executed in the same environment as users of your site. Headless Chrome gives you a real browser context without the memory overhead of running a full version of Chrome.
In the above program, we include the WebDriverManager class in our program using the "import" statement.
Then we create a WebDriverManager instance with WebDriveManager.chromedriver.setup() in our program
We then create a driver instance of Google Chrome and open a site "www.google.com".
So ,when we execute the above program, the expected output is the URL "https://www.googlecom" will open in a new Chrome browser instance.
How does Headless testing benefit developers?
There are several benefits, actually. They can create new testing opportunities, as well as accelerate tests you’re already running.
Benefits include:
· Useful in CI pipeline
· Beneficial in web scraping
· Greater testing reach
· Improved speed and performance
· Multitasking
Useful in CI pipeline
When we need to execute automated test cases remotely on a server or in any of the build and release pipelines for continuous integration servers like Jenkins, it is not always possible to install real browsers on such remote machines. We can use headless browsers to run automation tests efficiently.
Beneficial in web scraping
When you want to write a web scraper or data extractor that needs to visit some websites and collect data, headless browsers are a perfect choice. Because we are not concerned about functionality in these cases, we visit web pages and get the data.
Greater testing reach
When running Selenium tests, you typically need a machine that supports the graphics of the web browser that you’re testing on. With headless testing we get rid of this need and open up a whole new set of devices to test on. Ex. Servers, docker containers, etc.
Improved speed and performance
Headless testing gets rid of load time, allowing you to cut your testing times significantly. Tests with headless testing seem to show a 30% reduction of test execution times. And you can use other techniques, like running more tests in parallel, to amplify that benefit. When we need to run the regression scripts, in headless browsers, we could save time as they are much faster and can render results quickly.
Multitasking
Running normal Selenium tests take up your screen time, keeping you from being able to accomplish anything else on that device. With the UI disabled, headless testing lets you continue to use your computer while the tests execute in the background.
Disadvantages Of Headless Browser
Due to its faster page loading ability, sometimes it is difficult to debug the issues.
Real Browser Testing includes performing test cases in the presence of GUI. Also, these tests are performed in front of the user, hence the user can interact with the team, referring the GUI and discuss where ever changes or corrections are required. In such a case, Headless Browsers cannot be used.
As Headless Browsers don’t represent GUI, it is troublesome to report errors with the help of screenshots. A Real Browser helps to present the defects by generating screenshots as screenshots are a must in testing.
In the case where a lot of browser debugging is required, the use of Headless Browsers can be challenging.
EndNote:
Headless Browser has its own benefits while Real Browser has its own. As per the need for testing, one can choose whichever technique is preferable and beneficial to the tester.
For Example: In the case where there exists user involvement, Real Browser testing can be chosen. If there are no UI presentation requirements to perform the testing quickly, then one can go for Headless Browser testing.
More efficient testing would be the one with a combination of both Headless as well as Real Browser. Thereby overcoming the limitations of each individually.
https://www.numpyninja.com/post/is-headless-the-smart-way-to-go