2016-05-10 54 views
5

Ekran görüntüsünü, uygulamayı aşağıdaki koddan birini kullanın: JainLibrary. Ben junit ve appium kullanıyorum.Ekran görüntülerini referans görüntüyle karşılaştırmak için appium

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

Şimdi, ekran görüntüsünü bir referans resimle karşılaştırmak istiyorum, böylece test durumuyla ileriye doğru ilerleyebiliyorum.

+1

Karşılaştırmayı nasıl bir sonuç olarak bekliyorsunuz? –

+0

Uygulamada bir konum durumu var. Bu koşulu eşleştirebilirsem, bir sonraki test vakasına geçebilirim. Karşılaştırmaya ihtiyaç duyan birçok başka test vakası da var. – Alex

cevap

3

basit bir çözüm referans screenshoot her pikseli karşılaştırmak olacaktır: Bir PNG olarak referans ekran görüntüsü kaydetmek gerekir

// 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; 
} 

Not. Bir JPEG biçimi, pikselleri değiştirecektir.

+0

Yanıtlarınız için teşekkürler. Bugün deneyeceğim ve sonra uygun sonuçlarla size döneceğim. – Alex