This is very important scenario when You are automating test cases. Unfortunately Selenium does not provide any Classes t achive this, But still we can do this using third party API AShot.
Below is code and explained in the video how to compare images using AShot API.
Pre-Requisites:
You have to download third party API jars. Links provided below.
ashot 1.5.3
https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot/1.5.4
Gson 2.8.5
https://mvnrepository.com/artifact/com.google.code.gson/gson/2.8.5
Hamcreast-all 1.3
https://mvnrepository.com/artifact/org.hamcrest/hamcrest-all/1.3
Capture logo image present on a web page.
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import ru.yandex.qatools.ashot.AShot;
import ru.yandex.qatools.ashot.Screenshot;
public class CaptureLogoImage
{
public static void main(String args[]) throws IOException
{
System.setProperty("webdriver.chrome.driver","C://Drivers/chromedriver_win32/chromedriver.exe");
WebDriver driver=new ChromeDriver();
driver.get("https://opensource-demo.orangehrmlive.com/");
WebElement logoImageElement = driver.findElement(By.xpath("//*[@id=\"divLogo\"]/img"));
Screenshot logoImageScreenshot = new AShot().takeScreenshot(driver, logoImageElement);
ImageIO.write(logoImageScreenshot.getImage(),"png",new File("C://SeleniumPractice/logos/OrangeHRMlogo.png"));
File f = new File("C://SeleniumPractice/logos/OrangeHRMlogo.png");
if(f.exists())
{
System.out.println("Image File Captured");
}
else
{
System.out.println("Image File NOT exist");
}
}
}
Compare images
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import ru.yandex.qatools.ashot.AShot;
import ru.yandex.qatools.ashot.Screenshot;
import ru.yandex.qatools.ashot.comparison.ImageDiff;
import ru.yandex.qatools.ashot.comparison.ImageDiffer;
public class ImageComparison
{
public static void main(String args[]) throws IOException
{
System.setProperty("webdriver.chrome.driver","C://Drivers/chromedriver_win32/chromedriver.exe");
WebDriver driver=new ChromeDriver();
driver.get("https://opensource-demo.orangehrmlive.com/");
BufferedImage expectedImage = ImageIO.read(new File("C://SeleniumPractice//logos/OrangeHRMlogo.png"));
WebElement logoImageElement = driver.findElement(By.xpath("//*[@id=\"divLogo\"]/img"));
Screenshot logoImageScreenshot = new AShot().takeScreenshot(driver, logoImageElement);
BufferedImage actualImage = logoImageScreenshot.getImage();
ImageDiffer imgDiff = new ImageDiffer();
ImageDiff diff = imgDiff.makeDiff(actualImage, expectedImage);
if(diff.hasDiff()==true)
{
System.out.println("Images are Not Same");
}
else {
System.out.println("Images are Same");
}
driver.quit();
}
}