Снимок экрана: RasterFormatException (y + высота) находится вне растра - PullRequest
0 голосов
/ 30 мая 2019

Используя Selenium Webdriver, чтобы сделать снимок экрана для конкретного элемента пользовательского интерфейса, как это было предложено в другом посте, я использую метод getSubimage для захвата экрана. Но, получая исключение сбоя.

Я не уверен в разнице в getLocation (). GetX () и getSize (). GetWidth (). GetX () в uielement. Если кто-то может это прояснить, так как внутри условия метода WritableRaster он всегда проверяет y + height

File imgSrc=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        Point point = uiElem.getLocation();    
         Point bottomright = new Point(uiElem.getSize().getWidth(),
                 uiElem.getSize().getHeight());             
          int xcord = point.getX();
          int ycord = point.getY();  

          BufferedImage img;
        try {
            img = ImageIO.read(imgSrc);
             BufferedImage dest = img.getSubimage(xcord, ycord, bottomright.getX(), bottomright.getY());
              ImageIO.write(dest, "png", imgSrc);       
              FileUtils.copyFile(imgSrc, new File(".\\Screenshots\\123.png"));          
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

Во время отладки я заметил, что img (ширина 1366 и высота = 613). и getSubImage () имеет (194,1335,960,15). Это всегда будет сбой для условия (y + высота)> (this.minY + this.height) внутри createWritableChildMethod. Так, может кто-нибудь указать, где это идет не так, также это не имеет смысла, так как почему мы добавляем (у + высота) субизображения больше?

1 Ответ

0 голосов
/ 01 июня 2019

Нашел обходной путь, просто замечает, что лучше использовать getScreenshotAs () непосредственно в UIElement, не делая много манипуляций с элементом.

public void takeSmallScreenshot(WebDriver driver, WebElement uiElem)
{
         File uiElementSrc = uiElem.getScreenshotAs(OutputType.FILE);
         try {
            FileUtils.copyFile(uiElementSrc, new File(".\\Screenshots\\"+uiElem.getText().substring(0,5)+".png"));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

}
...