Selenide, Jenkins // После запуска джобы на локально развернутом Jenkins, скриншот в allure выглядит очень странно

Всем привет.

Развернул у себя локально Jenkins, настроил плагины нужные.
Делаю скриншот во время выполнения и в аллюре в отчете вижу следующее:

То есть видно что он добавляется, но содержимое его очень странное.

Делаю скриншот так:

import com.codeborne.selenide.Screenshots;
import com.google.common.io.Files;
import io.qameta.allure.Attachment;

import java.io.File;
import java.io.IOException;

public class Screenshoter
{
    @Attachment(value = "Page screenshot", type = "image/png")
    public static byte[] screenshot()
    {
        File screenshot = Screenshots.takeScreenShotAsFile();
        byte[] result = null;

        try
        {
            result = Files.toByteArray(screenshot);
        }
        catch (IOException e)
        {
            System.err.println(e);
        }

        return result;
    }
}

В настройках перед тестами еще делаю так:

SelenideLogger.addListener("AllureSelenide", new AllureSelenide().screenshots(true).savePageSource(false));

Кто-то уже сталкивался с таким ?

И да, это не проблема в задержке что страница не успевает подгрузиться.

Plugin:

Использую maven.

<dependency>
            <groupId>io.qameta.allure</groupId>
            <artifactId>allure-testng</artifactId>
            <version>2.22.1</version>
</dependency>

Сам тест:

    @Test(priority = 5)
    public void openByUsingEnvParam() throws IOException
    {
        String env = System.getenv("ENV");

        log.info("ENV = " + env);

        PropReader propReader = new PropReader();
        log.info("URL = " + propReader.getURL());
        Selenide.open(propReader.getURL());

        $(withText("text")).shouldBe(Condition.visible, Condition.enabled);
        Screenshoter.screenshot();
    }

Any ideas ?

Upppp

Помогите :slight_smile: Очень нужно.

Не пойму в чем проблема.

Вот попробовал на другой сайт зайти - и там только часть попадает в скриншот:

Видно, что реклама появилась, а самый главный контент страницы остался серым. :hushed: :open_mouth:

Заходил на этот d3.ru никаких 19 июней там не встречал. А форум этот нынче не то, чтобы сильно живой. Попробуйте для начала сами решить проблему. Во-первых ознакамливались ли вы уже с материалами создателей Selenide по снятию скриншотов? Они ж потратили время и создали две статьи на русском и английском. Наверное, стоит уважить их труд.
https://ru.selenide.org/documentation/screenshots.html
Также у них есть примеры с кодом, в том числе и отчетами Allure + Selenide + JUnit и там есть снятие скриншотов:
GitHub - selenide-examples/selenide-allure-junit

Из вашего описания проблемы абсолютно непонятно в чём она у вас состоит. В локальном дженкинсе, в вашем коде или в чём-то ещё. Для начала стоит убедиться, что ваш код без дженкинса при локальном запуске будет делать корректные скриншоты. Это обычные файлы, которые лежат в папке “target/allure-results”, ну, или куда вы их сами положите. Вместо аннотаций можно явно вызвать метод снятия скриншота и убидеться, что он работает корректно.

Удачи.

Заходил на этот d3.ru никаких 19 июней там не встречал.

Это уже другая проверка, суть вопроса вообще не в этом.

Во-первых ознакамливались ли вы уже с материалами создателей Selenide по снятию скриншотов? Они ж потратили время и создали две статьи на русском и английском. Наверное, стоит уважить их труд.
https://ru.selenide.org/documentation/screenshots.html

Конечно :slight_smile: Более того, это код рабочий(по снятию скриншотов и аттачу к репорту) и он работает на CircleCI.

Из вашего описания проблемы абсолютно непонятно в чём она у вас состоит.

Вы сами не видите ? Скрин, который заатачится к репорту не отображает актуальное содержимое web page на момент снимка. Что тут еще непонятного может быть?

Для начала стоит убедиться, что ваш код без дженкинса при локальном запуске будет делать корректные скриншоты.

Уже делал. Сохранял массив byte к себе локально - всё удачно сохраняется со всем содержимым.

Т.е. проблема в Jenkins? А внутри него что лежит в папках? Там файлы скриншотов обрезанные? Для уточнения - проблема в созданных файлах, которые делает скриншотер или в том, как они потом открываются в Jenkins’е (в плагине, например).

В том-то и дело что я не знаю в чём проблема.
Jenkins ставил по инструкции - всё бегает и работает локально.
Сегодня его еще обновил до версии:

Jenkins 2.452.2

или в том, как они потом открываются в Jenkins’е (в плагине, например).

Я думаю в этом проблема, ибо как уже сказал ранее, код рабочий с предыдущего проекта и на сёркле он всё аттачит и все там показывается.

А внутри него что лежит в папках? Там файлы скриншотов обрезанные?

Я внутрь папок не лазил в плагины там и прочее. Всё через UI настраивал.

Так можно ж зайти внутрь и посмотреть, что лежит.
Также можно никуда не заходить и получить target через UI, только вот не помню есть там из коробки workspase или его нужно настраивать, чтобы он прикладывал в Job’у результаты сборки (build) или же это надо отдельно донастраивать.

Вот один из скриншотов в C:.…\Jenkins.jenkins\workspace\Run IMD tests\target\allure-results

Вместо контента вебстраницы я вижу серый прямоугольник.

Ну, т.е. проблема как создаётся скриншот, а не как потом отрисовывается. Там были какие-то варианты со скриншотами с использованием Base64. Попробуйте различные виды, будет ли различие между ними. При этом локально или на другом CI у вас всё работает корректно? Надо сравнить чем запуск из Jenkins CI отличается от вашего локального (команда запуска, настройка окружения).

Хоспади, бред какой-то :confused:

Всё перепробовал:

  1. сменил MIME type на image/jpeg и обратно на image/png
  2. сменил на OutputType.BASE64:
        String screenshotAsBase64 = Selenide.screenshot(OutputType.BASE64);
        byte[] result = Base64.getDecoder().decode(screenshotAsBase64);
  1. сменил на OutputType.BYTES:
        byte[] result = Selenide.screenshot(OutputType.BYTES);

НИЧЕГО НЕ ПОМОГАЕТ.
“Серая масса”:

Селенид у меня такой стоит:

<dependency>
            <groupId>com.codeborne</groupId>
            <artifactId>selenide-testng</artifactId>
            <version>7.2.3</version>
            <scope>compile</scope>
        </dependency>

Зашел, открываю c65cb2b2-b568-4c37-a440-a629062495bd-attachment в Notepad++ и вижу:

Очевидно, что NUL - это ничего…
То есть проблема в создании скриншота, получается ?
HEEELP :slight_smile:

Хром подтягивается последний:

14:29:04  [main] INFO com.codeborne.selenide.webdriver.WebDriverFactory - BrowserName=chrome Version=126.0.6478.115 Platform=windows
14:29:04  [main] INFO com.codeborne.selenide.webdriver.WebDriverFactory - Selenide v. 7.2.3
14:29:04  [main] INFO com.codeborne.selenide.webdriver.WebDriverFactory - Selenium WebDriver v. 4.19.1 build revision: abe0ee07dc

Причём что самое интересное, рекламные баннеры-то он каким-то макаром увидел…
Мб при снятии скриншота там смещается фокус , что-то типа viewport ?
Может такое быть ?
Типа, что, координаты верхнего левого угла viewport “улетают за текстуры” (вообще за границы браузера) ?

В разработке есть такой инструмент и подход - дебаггинг (дебажить и т.д.). Собственно это то, что вам и нужно сейчас сделать. Отдебажить эту проблему. Выведите в лог / консоль параметры селенида как он запускается. В том числе и размеры окна браузера, безголовый (headless) режим и т.д. Проблема в том как сделан скриншот. За вас вашу задачу с дебагом всё равно никто не решит.

А вот они все настройки:

        SelenideLogger.addListener("AllureSelenide", new AllureSelenide().screenshots(true).savePageSource(false));

        Configuration.browserSize = "1920x1080";
        Configuration.headless = false;
        Configuration.assertionMode = AssertionMode.SOFT;
        Configuration.timeout = 10_000;

Ничего мудрёного.
Моя цель тут была всё это завести на локальном дженкинсе.

PS: да тут как бы и дебажить-то нечего :smiley: Всё линейно и очень просто…

Собственно, вот так выглядит запуск локально через mvn clean test.

mvn allure:serve


Всё видно, всё показывается.

Грешу на Дженкис… На Allure плагин дженкинса.