Allure + BDD (Jbehave) + Скрины (Thucydides)

Добрый день Коллеги и друзья,

Нужна ваша помощь,

На данный момент имеются готовые тесты с Thucydides отчетами и скринами.
Тесты на BDD.
Хочу перейти на Allure отчеты со скринами.

Allure подцепил и отчетики генерятся, но вот скрины не могу прикрутить ни в какую.
Репортер для Алюра использую этот:

Заранее благодарен за любые идеи!

Вы хотите брать те скриншоты, которые Thucydides генерит автоматически, с учетом всех настроек скриншотов (resolution, blure итд)? Задача не из легких :slight_smile: Сам недавно думал как это сделать, полез в сорцы - оказалось у Серенити нету открытого апи чтобы забирать эти самые скрины. Можете глянуть сами в код класса net.thucydides.core.steps.BaseStepListener в метод net.thucydides.core.steps.BaseStepListener private Optional<ScreenshotAndHtmlSource> grabScreenshot(TestResult result) и попробовать разобраться как оно там все происходит.

Я в итоге пришел к такому способу делать пользовательские скриншоты в Серенити:

    public static byte[] takeScreenshot() {
        WebDriver driver = ThucydidesWebDriverSupport.getDriver();
        if (WebDriverFactory.isAlive(driver) && (driver instanceof TakesScreenshot)) {
            return ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);
        }
        return null;
    }

Павел, Добрый день!

Да в принципе не обязательно Thucydides.
Главное чтобы скрины попали в отчет Allure, вот в том то и вопрос как его в алюр подсовывать скрины…

По Allure к сожалению не могу подсказать.
Если проблема именно с Allure, то лучше в этом топике убрать метку serenity и добавить allure, чтобы сориентировать людей с нужным опытом :wink:

1 лайк

лучше аспект(Aspectj) написать с анотацией @MakeScreenshot например и поставить ету анотацию на все шаги которие нужно скриншотить - в аспекте крепить скрншоти в Allure через attachment

1 лайк

Павел, спасибо еще раз. так и сделал.

Пробовал так сделать, аттач прописывал вот так:

@Attachment(value = "Page screenshot", type = "image/png")
public byte[] saveScreenshot(byte[] screenShot) {
    return screenShot;
}

и как Павел советовал

    public static byte[] takeScreenshot() {
        WebDriver driver = ThucydidesWebDriverSupport.getDriver();
        if (WebDriverFactory.isAlive(driver) && (driver instanceof TakesScreenshot)) {
            return ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);
        }
        return null;
    }

Но не помогает, скрины не аттачатся…

Еще нашел в гите Алюра такой пример:

со своим раннером, он работает но скрины не делает ни в какую…

в каком месте Ви визиваете вот ето ?
@Attachment(value = “Page screenshot”, type = “image/png”)
public byte[] saveScreenshot(byte[] screenShot) {
return screenShot;
}

P.S. :
Allure.addAttachment() пробовали вместо аннотации ?

Этот метод я вставлял в алюрный репортер и пробовал вызвать в шагах, пробовал вставлять его в раннер и вызывал его в шагах.

Сейчас попробовал, тоже самое ни скринов ни аттачей. хоть бы блин в папку скрины складывал, так он их даже не делает.
По Allure.addAttachment() для Jbehave нашел сейчас такой баг, но не понятно пофикиксили его или нет.

Сейчас залез в XML-ник отчета и увидел что появился тег , раньше его вроде не было.
Но скринов нет, они даже не делаются попросту.
И странно то что тег один, только тот который на закрытие везде стоит. а на открытие нет.

 <step start="1522936787893" stop="1522936792295" status="passed">
                    <name>When выполнено нажатие на "Получить бесплатно"</name>
                    <title>When выполнено нажатие на "Получить бесплатно"</title>
                    <attachments/>
                    <steps>
                        <step start="1522936788367" stop="1522936791462" status="passed">
                            <name>When выполнено нажатие на "Получить бесплатно"</name>
                            <title>When выполнено нажатие на "Получить бесплатно"</title>
                            <attachments/>
                            <steps/>
                        </step>
                    </steps>
                </step>

ето 99.99% проблема в очередности лисенера, по етому я и говорю попробовать сделать ето через аспекти - написать свой…если нету с етим опита - тогда гуглите aspectj

Добрый день
@BMar_cg, очень интересует Ваш прогресс по этой теме. Делал все примерно тоже самое, что и Вы, но скринов в отчете не получил. Надеюсь, что проблема решится.

У вас скрины вообще в папке есть? или даже скрины просто не делаются?

Скрины в папке есть, но к Allure отчету не аттачатся.

Зачем вы так делаете, когда любой дочерний класс вебдрайвера имлементирует интерфейс делания скриншота?

любой дочерний класс вебдрайвера имлементирует интерфейс делания скриншота

HtmlUnitDriver например не делает этого.

В том то и проблема что у меня скринов нет. Они просто не делаются.
При этом thucydides херачит скрины только в путь. Но мне то ни они нужны , а алюр. Такое ощущение что thucydides блокирует создание скринов для Алюра.

Прикрепление скринов к алюру в java 9 не работает, к слову.

На 9тке почти все не работает :slight_smile: но у меня 8₽ка

HtmlUnitDriver и любой другой веб-драйвер в headless режиме предназначены совершенно для другой цели.

Да, я в курсе для чего нужен headless режим у браузера :slight_smile: Но это не отменяет того факта что ThucydidesWebDriverSupport.getDriver() может вернуть инстанс HtmlUnitDriver, поэтому нам нужна доп. проверка перед снятием скриншота.

P.S. Мне кажется, чо обсуждение это вопроса здесь не очень соотносится с темой топика, поэтому не стоит его развивать.

Продолжение темы.
С горем пополам начались делать скрины, складываю их в папку target \ allure-results
Но толку ноль!
Allure их не подсасывает и подозреваю потому что “OutputType.FILE”
Но если я начинаю использовать “OutputType.BYTE” то скрины не делаются.

Какие будут идеи?

private File takeScreenShot(String name) throws IOException {
        String path = getRelativePath(name);
        WebDriver driver = ThucydidesWebDriverSupport.getDriver();
        File screenShot = ((TakesScreenshot) driver)
                .getScreenshotAs(OutputType.FILE);
        FileUtils.copyFile(screenShot, new File(path));
        String filename = makeScreenShotFileName(name);
        System.out.println("Taking Screenshot! " + filename);
        Reporter.log("<a href=" + path + " target='_blank' >" + filename
                + "</a>");
        return screenShot;
    }

Сам аттачмент пробовал присобачить по разному, включая такой способ

   @Attachment(type = "image/png")
    private File saveScreenshot(File screenshot) {
        return screenshot;