Ashot Java Heap Space Errors

278 Views Asked by At

I want to run a parralel screenshot testing, but have got an error. I raised Xmx and Xms up, they are not eating all my RAM, which I have a 32gb. But they fails at random point after eating it's defined memory. Have there any solution for memory optimization ? I comapare somewhere 18+ images which in PNG format takes nearby 200-600-800kb

This is gradle.properties.

org.gradle.parallel=false
org.gradle.caching=false
org.gradle.console=verbose
org.gradle.jvmargs=-Xmx16g -Xms4g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
systemProp.junit.jupiter.execution.parallel.enabled=true
systemProp.junit.jupiter.execution.parallel.mode.default=concurrent
systemProp.junit.jupiter.execution.parallel.mode.classes.default=concurrent
systemProp.junit.jupiter.execution.parallel.config.strategy=dynamic
systemProp.junit.jupiter.execution.parallel.config.dynamic.factor=1

My imports, there is latest versions of the libs.

import ru.yandex.qatools.ashot.AShot;
import ru.yandex.qatools.ashot.Screenshot;
import ru.yandex.qatools.ashot.comparison.ImageDiff;
import ru.yandex.qatools.ashot.comparison.ImageDiffer;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

And some code with I find diff

    protected int differenceBetweenPages(String pageName,
                                         String actualUrl,
                                         int scrollTime) throws IOException {
        open(actualUrl);
        actual = capturePage(scrollTime);
        ImageIO.write(actual.getImage(), "png", actualImg(pageName));

        attach = new FileInputStream(actualImg(pageName));
        Allure.addAttachment("Actual page", "image/png", attach, ".png");
        attach.close();

        expected = expectedScreenshot(pageName);
        diff = new ImageDiffer().makeDiff(expected, actual);
        ImageIO.write(diff.getMarkedImage(), "png", diffImg(pageName));

        attach = new FileInputStream(diffImg(pageName));
        Allure.addAttachment("Diff Page", "image/png", attach, ".png");
        attach.close();

        return diff.getDiffSize();
    }

1

There are 1 best solutions below

2
On

I also had issues using Ashot library. I switched to ShutterBug instead and it's working fine. https://github.com/assertthat/selenium-shutterbug

build.gradle snippet

compile 'com.assertthat:selenium-shutterbug:0.9.2'

API to capture the page screenshot and attach it to the Allure Report

@Attachment(value = "Page screenshot", type = "image/png")
    public static byte[] captureScreenshot(WebDriver driver) {

        BufferedImage screenshot = Shutterbug.shootPage(driver, ScrollStrategy.WHOLE_PAGE, true).getImage();
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

        try {
            ImageIO.write(screenshot, "png", outputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }

        return outputStream.toByteArray();

    }