Как сравнить скриншоты с эталонным изображением с помощью appium

Я могу успешно сделать снимок экрана на одной из страниц моего приложения JainLibrary, используя приведенный ниже код. Я использую junit и appium.

public String Screenshotpath = "Mention the folder Location"; File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(scrFile, new File(Screenshotpath+"Any name".jpg")); 

Теперь я хочу сравнить скриншот с эталонным изображением, чтобы я мог двигаться вперед с тестовым примером.

Простым решением было бы сравнить каждый пиксель с эталонным экраном:

 // save the baseline screenshot driver.get("https://www.google.co.uk/intl/en/about/"); File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(scrFile, new File("c:\\temp\\screenshot.png")); // take another screenshot and compare it to the baseline driver.get("https://www.google.co.uk/intl/en/about/"); byte[] pngBytes = ((TakesScreenshot)driver).getScreenshotAs(OutputType.BYTES); if (IsPngEquals(new File("c:\\temp\\screenshot.png"), pngBytes)) { System.out.println("equals"); } else { System.out.println("not equals"); } 
 public static boolean IsPngEquals(File pngFile, byte[] pngBytes) throws IOException { BufferedImage imageA = ImageIO.read(pngFile); ByteArrayInputStream inStreamB = new ByteArrayInputStream(pngBytes); BufferedImage imageB = ImageIO.read(inStreamB); inStreamB.close(); DataBufferByte dataBufferA = (DataBufferByte)imageA.getRaster().getDataBuffer(); DataBufferByte dataBufferB = (DataBufferByte)imageB.getRaster().getDataBuffer(); if (dataBufferA.getNumBanks() != dataBufferB.getNumBanks()) { return false; } for (int bank = 0; bank < dataBufferA.getNumBanks(); bank++) { if (!Arrays.equals(dataBufferA.getData(bank), dataBufferB.getData(bank))) { return false; } } return true; } 

Обратите внимание, что вам нужно сохранить снимок экрана как PNG . Формат JPEG изменит пиксели.