2016-05-10 81 views
5

我能夠使用下面的代碼成功截取應用程序JainLibrary的頁面截圖之一。我正在使用junit和appium。如何將屏幕截圖與使用appium的參考圖像進行比較

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

現在我想比較屏幕截圖和參考圖像,以便我可以繼續測試用例。

+1

你期待什麼樣的結果進行比較? –

+0

應用程序中有一個位置條件。如果我能夠匹配該條件,那麼我可以繼續進行下一個測試用例。還有很多其他的測試用例需要比較。 – Alex

回答

3

一個簡單的解決辦法是每個像素與參考screenshoot比較:

// 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格式將改變像素。

+0

感謝您的回答。我會今天嘗試,然後以適當的結果回覆你。 – Alex

相關問題