Java에서 WinShot 사용

WinShot 명령줄 인수



WinShot은 상주형의 소프트라고 하는 인상이 강합니다만, 실은 커멘드 라인으로부터도 이용할 수 있습니다.

명령줄에는 다음 옵션을 지정합니다.

기능 옵션 (필수)




인수
동작


-Print 또는 -P
인쇄

-Preview 또는 -V
미리보기 표시

-Copy 또는 -C
클립보드로 복사

-Bitmap 또는 -B
비트맵 저장

-Jpeg 또는 -J
JPEG 저장


대상 옵션 (필수)




인수
동작


-ActiveWindow 또는 -A
활성 창

-Desktop 또는 -D
데스크탑

-Rectangle 또는 -R
사각형 범위 지정

-Client 또는 -CL
클라이언트 영역


기타 옵션 (선택 사항)




인수
동작


-Negative 또는 -N
부정적인 반전

-Grayscale 또는 -G
그레이 스케일 변환

-Close 또는 -X
캡처 후 상주하지 않고 종료


예를 들어, 활성 창을 bitmap으로 저장하려면 다음과 같이 실행합니다.
WinShot.exe -B -A -X
-X 가 된장입니다. WinShot은 다중 시작할 수 없으므로 -X 옵션으로 매번 종료하도록 해야 합니다. 또한 WinShot이 시작된 상태에서는 이 명령을 사용할 수 없습니다.

출력 디렉토리나 세분화된 옵션은 명령줄에서 지정할 수 없습니다. 조금 유감.

Java에서 사용



Java에서 사용하려면 어리석게 exec합니다. 네. 그뿐입니다.
Process process = Runtime.getRuntime().exec(new String[]{"[WinShot.exeのパス]", "-J", "-A", "-X"});
process.waitFor();

Java의 사용 예



이 사용소는 자동 테스트 캡처입니다. 물론 테스트 프레임워크에 부속되어 있는 스크린 캡쳐 메소드를 사용하면 좋을 것입니다만, 경계에 의해 테스트 에비던스는 WinShot로 취한다고 하는 암묵의 양해가 있거나 합니다. 암묵적인 이해는 채우면서 자동화하기 위한 타협안이라는 것입니다.

다음은 Selenide와 결합한 경우의 예입니다. 이 예에서는 다음 세 곳에서 WinShot을 사용하여 화면 캡처를 수행하는 예입니다.
  • Google 페이지를 연 직후
  • 검색 단어를 입력 한 직후
  • 검색 결과를 표시 한 직후
  • import static com.codeborne.selenide.Selenide.*;
    import static org.junit.Assert.*;
    
    import java.io.File;
    import java.io.IOException;
    
    import org.junit.After;
    import org.junit.Test;
    
    import com.codeborne.selenide.Condition;
    
    public class HogeTest {
    
        private static final String WINSHOT_EXE = "C:\\Program Files (x86)\\WinShot\\WinShot.exe";
        private static final String WINSHOT_DEST_DIR = "C:\\winshot";
        private static final String REPORT_DIR = "report";
    
        @After
        public void スクリーンショットを保存用ディレクトリへ() {
            File reportDir = new File(REPORT_DIR);
            reportDir.mkdirs();
            File winshotDir = new File(WINSHOT_DEST_DIR);
            for (File child : winshotDir.listFiles()) {
                File destFile = new File(reportDir, child.getName());
                child.renameTo(destFile);
            }
        }
    
        @Test
        public void test() {
            open("http://www.google.co.jp/");
            printScreen();
    
            $("input[type=text]").val("テスト");
            printScreen();
    
            $("input[type=text]").pressEnter();
            $("#resultStats").waitUntil(Condition.appear, 5000);
            printScreen();
        }
    
        private void printScreen() {
            try {
                Process process = Runtime.getRuntime().exec(
                        new String[] { WINSHOT_EXE, "-J", "-A", "-X" });
                process.waitFor();
                int exitCode = process.exitValue();
                if (exitCode != 0) {
                    fail("スクリーンショットを撮るのに失敗。終了コード:" + exitCode);
                }
            } catch (IOException | InterruptedException e) {
                fail("スクリーンショットを撮るのに失敗。");
            }
        }
    
    }
    

    【결과】




    실행하면 상수 REPORT_DIR 에 정의한 디렉토리에 캡처한 이미지가 저장됩니다. 테스트 내에서는 쭉 캡처를 취해, @After 로 파일을 이동하도록(듯이) 만들고 있습니다. 실제로는 여러 테스트가 있기 때문에 파일 이동 부분은 조금 더 만들어야 할 것입니다.

    이번에는 이상

    좋은 웹페이지 즐겨찾기