Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Тестирование верстки путем сравнение скриншотов в aShot

ashot
java
webdriver
selenium
Теги: #<Tag:0x00007fedbb871918> #<Tag:0x00007fedbb8717b0> #<Tag:0x00007fedbb8715d0> #<Tag:0x00007fedbb871418>

(Kosmos) #1

Добрый день.

Делаю сравнение заранее сохраненного фрагмента файла и текущего скриншота страницы:

 Class<? extends DiffMarkupPolicy> diffStorageClass;

        ImageDiffer imageDiffer = new ImageDiffer()
                .withColorDistortion(10)
                .withDiffMarkupPolicy(diffStorageClass.newInstance() // тут NullPointerException 
                        .withDiffColor(Color.RED));

        ImageDiff diff = imageDiffer.makeDiff(
                new AShot().takeScreenshot(ManageBrowser.getDriver()).getImage(),
                loadImage("./src/main/resources/images/table_th.png")
        );

        String path = screenPath + "/test.png";
        File outputFile = new File(path);
        try {
//            ImageIO.write(shot.getImage(), "png", outputFile);
            ImageIO.write(diff.getDiffImage(), "png", outputFile);
        }
        catch (IOException e){e.printStackTrace();}

пример брал отсюда https://github.com/yandex-qatools/ashot/blob/master/src/test/java/ru/yandex/qatools/elementscompare/tests/DifferTest.java

Возникает java.lang.NullPointerException в строке

.withDiffMarkupPolicy(diffStorageClass.newInstance()

не ясно, как инициализировать переменную в строке

Class<? extends DiffMarkupPolicy> diffStorageClass;

(Pavel Ponomaryov) #2

Конечно возникает. Вы его объявили, но не инициализировали. Посмотрите внимательнее пример, как там передаётся параметр.


(Kosmos) #3

В итоге получил предварительно рабочую функцию:

    @Test
    public void testDiffImg() throws Exception {
        WebElement myWebElement = findElement("select_y", byId);

        ImageDiffer imageDiffer = new ImageDiffer()
//                .withColorDistortion(11119017)
                .withDiffMarkupPolicy(new PointsMarkupPolicy()
                        .withDiffColor(Color.RED));

        ImageDiff diff = imageDiffer.makeDiff(
                loadImage("./src/main/resources/images/select_y.png"),
                new AShot()
                        .takeScreenshot(driver, myWebElement).getImage()
        );

        String path = screenPath + "/test2.png";
        File outputFile = new File(path);
        try {
            ImageIO.write(diff.getMarkedImage(), "png", new File(screenPath + "/getMarkedImage2.png"));
        }
        catch (IOException e){e.printStackTrace();}

        assertThat(diff.hasDiff(), is(false));
    }

может кому-то пригодится