Selenium網頁自動化測試的圖形比對

 Selenium網頁自動化測試的圖形比對

這篇文章主要說明如何進行兩張圖形比對。

主要用在當畫面比較複雜時,網頁元件的驗證與比對相對複雜,

如果每次執行整個畫面都有預期一定的結果時,就可以直接擷取畫面,

用圖形比對的方式驗證。最後也舉一個完整的程式範例說明。

 測試情境

1. 這裡用 google 為例

2. 瀏覽Google 網頁,將網頁的呈現結果螢幕畫面擷取下來。

3. 將該擷取畫面的圖檔與之前準備好的圖檔比較。看看兩個畫面擷取的圖檔是否相同

程式說明

這個程式主要用到幾個小技巧

  • 畫面擷取:Selenium內建這個功能可以幫助擷取螢幕畫面 getScreenshotAs

File screenshotFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(screenshotFile, new File(scrFile));

  • 圖形比對:CompareUtil.CompareImage

圖形比對的部分,這裡運用到其他的比對工具。另外,其實也可以直接將該檔案取 MD5,直接比對 MD5也是另一個比較簡單的做法

程式範例

[pastacode lang=”java” message=”Selenium Image Comparison” highlight=”” provider=”manual”]

package mySelenium;

import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.*;
import org.apache.commons.io.FileUtils;
import org.junit.*;
import static org.junit.Assert.*;
import java.io.File;

public class ImgCompareTest {
	
	public WebDriver driver;
		
	@Before
	public void setUp() throws Exception { 
		driver = new FirefoxDriver();
	}

	@Test
	public void imgCompare() throws Exception {
	
		String scrFile = "c:\\Google_screenshot.png";
		String baseScrFile = "c:\\baseScreenshot.png";
		
		//Open the BMI Calculator Page and get a Screen Shot of Page into a File
		driver.get("http://www.google.com");
		File screenshotFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
		FileUtils.copyFile(screenshotFile, new File(scrFile));
		
		//Verify baseline image with actual image
		// Here we will need "CompareUtil" class. If you need the class, leave a message.
		assertEquals(CompareUtil.Result.Matched, CompareUtil.CompareImage(baseScrFile,scrFile));
		
	}
	
	@After
	public void tearDown() throws Exception {
		//Close the browser
		driver.quit();
		
		
	}
}

[/pastacode]

(程式範例參考來源Syed Sayem大師)

3 thoughts on “Selenium網頁自動化測試的圖形比對

  1. 你好,我是一名剛剛開始使用selenium的初學者
    有需要使用到影像比對功能,請問能夠了解一下CompareUtil是怎麼設計的嗎 ??

    1. 你好,請問是怎樣的情境需要影像比對呢?
      多半的情況下筆者並不建議影像比對。因為實際的結果與預期的結果會受到畫面細微變動的因素極大。

      1. 你好
        主要是會從資料庫撈資料進行繪製折線圖、會依照設定的臨界值進行繪製上下限的線
        想要測試的主要是想看看上下限的線是否會因設定而改變、當折線圖達到上下限時是否會觸發警示反應(改變項目顏色)

        只是不知道其影像辨識細膩程度(因為與折線圖相比,上下限較不明顯)、還有是否能夠辨識顏色??

        感謝您的回覆,麻煩您了!

Leave a Reply

Your email address will not be published. Required fields are marked *