How to take full page screenshot of a scrollable webpage with sticky element in Safari using java?

621 Views Asked by At

I tried taking screenshot with shutterbug but the screenshot is not proper.

PageSnapshot image = Shutterbug.shootPage(driver, Capture.FULL, 500, true);
image.withName("shuteerbug").save(home + File.separator + "Desktop");
1

There are 1 best solutions below

0
On

Some time ago I was using ru.yandex.qatools.ashot to capture the whole page to a single image in Katalon Studio (groovy).

public class ImageManager {

    @Keyword
    def capturePageToJpg(String url, String folderPath, Viewport viewport) {
        WebDriver driver = DriverFactory.getWebDriver()
        String fileName = getEtalonImageFileName(url)
        String filePath = folderPath + fileName
        String toReturn
        Screenshot screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(2000)).takeScreenshot(driver)
        BufferedImage image = screenshot.getImage()
        int viewportHeight = viewport.getHeight()
        int imageHeight = image.getHeight()
        int pageWidth = driver.findElement(By.tagName("body")).getRect().getWidth()
        if (imageHeight > viewportHeight) {
            image = image.getSubimage(0, 0, pageWidth, imageHeight)
        }
        ImageIO.write(image, "jpg", new File(filePath))
        File file = new File(filePath)
        if (file.exists()) {
            KeywordUtil.logInfo("Saved file: " + filePath)
            toReturn = filePath
        }
        return toReturn
    }

}

public class Viewport {
    
    String name;
    int width;
    int height;
    
    public String getName() {
        return name;
    }
    
    public int getWidth() {
        return width;
    }
    
    public int getHeight() {
        return height;
    }
    
    public Viewport(String name, int width, int height) {
        this.name = name;
        this.width = width;
        this.height = height;
    }
    
}


public class ViewportManager {

    @Keyword
    def desktop() {
        Viewport viewport = new Viewport("desktop", 1920, 1080)
        return viewport
    }

    @Keyword
    def mobileHorizontal() {
        Viewport viewport = new Viewport("mobileHorizontal", 732, 412)
        return viewport
    }

    @Keyword
    def mobileVertical() {
        Viewport viewport = new Viewport("mobileVertical", 412, 732)
        return viewport
    }

    @Keyword
    def tabletHorizontal() {
        Viewport viewport = new Viewport("tabletHorizontal", 1024, 768)
        return viewport
    }

    @Keyword
    def tabletVertical() {
        Viewport viewport = new Viewport("tabletVertical", 768, 1024)
        return viewport
    }

    @Keyword
    def setViewport(Viewport viewport) {
        int height = WebUI.getViewportHeight()
        int width = WebUI.getViewportWidth()
        if (height != viewport.getHeight() || width != viewport.getWidth()) {
            WebUI.setViewPortSize(viewport.getWidth(), viewport.getHeight())
        }
    }
}