Selenium을 사용하면 키보드의 Print Screen(화면 인쇄) 버튼 동작을 그대로 시뮬레이션할 수 있습니다. Print Screen 버튼을 눌렀을 때와 마찬가지로 현재 브라우저 화면이 스크린샷으로 캡처되며, 이 과정은 크게 세 단계로 진행됩니다.
스크린샷 캡처는 자동화 테스트에서 실패 원인을 분석하는 데 매우 중요한 단계입니다. 테스트가 예상대로 동작하지 않았을 때 당시 화면 상태를 이미지로 남겨두면 문제를 빠르게 파악하고 재현할 수 있습니다.
1단계: driver 객체를 TakesScreenshot 인터페이스로 변환
Selenium에서 스크린샷 기능은 TakesScreenshot 인터페이스를 통해 제공됩니다. 따라서 먼저 WebDriver 객체를 이 인터페이스 타입으로 캐스팅해야 합니다.
TakesScreenshot s = (TakesScreenshot)driver;
2단계: getScreenshotAs 메서드로 이미지 파일 생성
캐스팅된 객체에서 getScreenshotAs 메서드를 호출하면 현재 화면이 파일 형태로 캡처됩니다.
File sp = s.getScreenshotAs(OutputType.FILE);
3단계: FileUtils.copyFile로 원하는 위치에 저장
마지막으로 Apache Commons IO 라이브러리의 FileUtils.copyFile 메서드를 사용해 캡처된 임시 파일을 지정한 경로에 복사하여 저장합니다.
FileUtils.copyFile(sp, new File("이미지 파일 경로"));전체 예제 코드
아래는 ChromeDriver를 사용해 특정 페이지에 접속한 후 전체 화면을 캡처하여 PNG 파일로 저장하는 완전한 예제입니다.
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.apache.commons.io.FileUtils;
import java.io.File;
public class PrintScreenSimulate {
public static void main(String[] args) throws Exception {
System.setProperty("webdriver.chrome.driver",
"C:\\Users\\ghs6kor\\Desktop\\Java\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("https://www.tutorialspoint.com/index.htm");
// 스크린샷 캡처
File src = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(src, new File("logopage.png"));
driver.quit();
}
}참고 사항
FileUtils 클래스는 Selenium에 기본 포함되어 있지 않으므로, 프로젝트에 Apache Commons IO 의존성을 추가해야 합니다. Maven을 사용한다면 pom.xml에 commons-io 아티팩트를 추가하면 됩니다.
또한 위 예제처럼 전체 페이지가 아니라 특정 요소(WebElement)만 캡처하고 싶다면, 해당 요소 객체에 동일하게 getScreenshotAs 메서드를 호출하면 됩니다. 이 방식은 실패 분석 시 문제가 된 UI 영역만 정확히 기록할 수 있어 유용합니다.