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을 사용하여 화면 캡처를 수행하는 예입니다.
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
로 파일을 이동하도록(듯이) 만들고 있습니다. 실제로는 여러 테스트가 있기 때문에 파일 이동 부분은 조금 더 만들어야 할 것입니다.이번에는 이상
Reference
이 문제에 관하여(Java에서 WinShot 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tatesuke/items/be03226f5ec865ca4cce텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)