屏幕截图:RasterFormatException(y +高度)在Raster之外

时间:2019-05-30 17:05:19

标签: java eclipse selenium selenium-webdriver

使用Selenium Webdriver按照其他帖子的建议获取特定UI元素的屏幕截图,我正在使用getSubimage方法来捕获屏幕元素。但是,收到失败异常。

我不确定uielement的getLocation()。getX()和getSize()。getWidth()。getX()的区别。如果有人可以澄清这一点,那么在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)。对于createWritableChildMethod中的条件(y + height)>(this.minY + this.height),它将始终失败。那么,谁能指出哪里出了问题,那也是没有意义的,因为为什么我们增加(y + height)子图像更大?

1 个答案:

答案 0 :(得分:0)

找到了一种解决方法,只是注意到最好直接在UIElement上使用getScreenshotAs()而不对元素进行大量操作。

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();
        }

}