WebDriver에서 특정 웹 영역을 캡처하는 방법

웹 드라이버를 사용한 학생들은 웹 드라이버가 브라우저의 페이지를 캡처할 수 있다는 것을 알고 있다.예:

public byte[] takeScreenshot() throws IOException {
 TakesScreenshot takesScreenshot = (TakesScreenshot) driver;
 return takesScreenshot.getScreenshotAs(OutputType.BYTES);
}
이렇게 만들어진 사진은 전체 웹 페이지다.그러나 때때로 우리는 전체 웹 페이지를 필요로 하지 않고, 단지 특정한 웹 Element만 필요로 해서 약간의 방해를 피할 수 있다.
WebDriver 자체는 이러한 API를 제공하지 않지만, 우리가 직접 할 수 있는 것은 바로 전체 화면의 캡처에서 다시 재단하는 것이다. 다음과 같다.

public BufferedImage createElementImage(WebElement webElement)
 throws IOException {
 //  webElement 。
 Point location = webElement.getLocation();
 Dimension size = webElement.getSize();
 //  。
 BufferedImage originalImage =
  ImageIO.read(new ByteArrayInputStream(takeScreenshot()));
 //  webElement 。
 BufferedImage croppedImage = originalImage.getSubimage(
  location.getX(),
  localtion.getY(),
  size.getWidth(),
  size.getHeight());
 return croppedImage;
}
여기서 ImageIO와 BufferedImage는 각각 javax에서 가져옵니다.imageio와java.awt.image.
이런 방법은 캡처의 크기를 잘 줄일 수 있고 일부 불확정 요소(예를 들어 날짜와 시간 등)를 피할 수 있으며 테스트에서 캡처를 저장하는 좋은 방식이다.
참고: 테스트된 웹 페이지에 iframe이 포함되어 있으면 더 복잡한 방식으로 WebElement의 위치를 계산해야 합니다웹 페이지의 어떤 요소의 위치를 계산하다.

좋은 웹페이지 즐겨찾기