Selenium - Capture videos

Sometimes we may not be able to analyze the failures just with the help of a log file or a screenshot. At times, it helps to capture the complete execution as a video. Let us understand how to capture videos.
We will make use of Monte Media Library to perform this operation.
Step 1 − Navigate to the URL - https://www.randelshofer.ch/monte/index.html and download the screen recorder JAR as shown below.
Step 2 − After downloading, add the JAR file to the Libraries of the current project.
Step 3 − We will use Java's AWT package to initialize the graphics configuration.
GraphicsConfiguration gc = GraphicsEnvironment
  .getLocalGraphicsEnvironment()
  .getDefaultScreenDevice()
  .getDefaultConfiguration();
Step 4 − An instance of ScreenRecorder is created which takes the following parameters.
GraphicsConfiguration
Provides information about the display screen such as size and resolution.
Video and compression format
The output format (AVI) of the movie with number of frames/sec.
Color of the mouse cursor and refresh rate
Specifies the mouse cursor color and refresh rate.
Audio format
If 'NULL', audio will NOT be recorded.
We will capture a video of the simple test execution - percent calculation.
import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import java.awt.*;

import org.apache.commons.io.FileUtils;

import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.By;

import org.monte.media.math.Rational;
import org.monte.media.Format;
import org.monte.screenrecorder.ScreenRecorder;

import static org.monte.media.AudioFormatKeys.*;
import static org.monte.media.VideoFormatKeys.*;


public class webdriverdemo {
   private static ScreenRecorder screenRecorder;
   
   public static void main(String[] args) throws IOException, AWTException {
      GraphicsConfiguration gconfig = GraphicsEnvironment
         .getLocalGraphicsEnvironment()
         .getDefaultScreenDevice()
         .getDefaultConfiguration();
      
      screenRecorder = new ScreenRecorder(gconfig,
         new Format(MediaTypeKey, MediaType.FILE, MimeTypeKey, MIME_AVI),
         new Format(MediaTypeKey, MediaType.VIDEO, EncodingKey,
            ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE,
            CompressorNameKey, ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE,
            DepthKey, (int)24, FrameRateKey, Rational.valueOf(15),
            QualityKey, 1.0f,
            KeyFrameIntervalKey, (int) (15 * 60)),
         new Format(MediaTypeKey, MediaType.VIDEO,
            EncodingKey,"black", FrameRateKey, Rational.valueOf(30)), null);
      
      WebDriver driver = new FirefoxDriver();
      
      // Start Capturing the Video
      screenRecorder.start();
      
      // Puts an Implicit wait, Will wait for 10 seconds before throwing exception
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
      
      // Launch website
      driver.navigate().to("http://www.calculator.net/");
      
      // Maximize the browser
      driver.manage().window().maximize();
      
      // Click on Math Calculators
      driver.findElement(By.xpath(".//*[@id = 'menu']/div[3]/a")).click();
      
      // Click on Percent Calculators
      driver.findElement(By.xpath(".//*[@id = 'menu']/div[4]/div[3]/a")).click();
      
      // Enter value 10 in the first number of the percent Calculator
      driver.findElement(By.id("cpar1")).sendKeys("10");
      
      // Enter value 50 in the second number of the percent Calculator
      driver.findElement(By.id("cpar2")).sendKeys("50");
      
      // Click Calculate Button
      driver.findElement(By.xpath(".//*[@id = 'content']/table/tbody/tr/td[2]/input")).click();
      
      // Get the Result Text based on its xpath
      String result =
         driver.findElement(By.xpath(".//*[@id = 'content']/p[2]/span/font/b")).getText();

      File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
      FileUtils.copyFile(screenshot, new File("D:\\screenshots\\screenshots1.jpg"));

      // Print a Log In message to the screen
      System.out.println(" The Result is " + result);
      
      // Close the Browser.
      driver.close();
      
      // Stop the ScreenRecorder
      screenRecorder.stop();
   }
}
The recorded video is saved in the "C:\users\<<UserName>>\Videos" folder as shown below.