2016-05-10 11 views
5

Sono in grado di acquisire uno screenshot della pagina della mia applicazione JainLibrary utilizzando il codice riportato di seguito. Sto usando junit e appium.Come confrontare gli screenshot con un'immagine di riferimento utilizzando l'appio

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

Ora voglio confrontare lo screenshot con un'immagine di riferimento in modo che possa andare avanti con il caso di test.

+1

Che tipo di risultato ti aspetti dal confronto? –

+0

C'è una condizione di posizione nell'applicazione. Se sono in grado di soddisfare tale condizione, posso procedere ulteriormente al prossimo caso di test. Ci sono anche molti altri casi di test che richiedono un confronto. – Alex

risposta

3

Una soluzione semplice sarebbe quella di confrontare ogni pixel con la screenshoot di riferimento:

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

Nota che è necessario per salvare l'immagine di riferimento come PNG. Un formato JPEG modificherà i pixel.

+0

Grazie per le vostre risposte. Lo proverò oggi e poi tornerò da te con risultati corretti. – Alex

Problemi correlati