Прикрепление скриншотов в шаги слушателем

Написан специальный класс-слушатель для степов:

public class StepListener extends LifecycleListener {    
    @Override
    public void fire(StepStartedEvent event) {  
        attachScreenshotByDriver("В начале шага");           
    }      
    @Override
    public void fire(StepFinishedEvent event) {           
        attachScreenshotByDriver("В конце шага");
    }    
}

Слушатель подключен к тестам (как указано в описании LifecycleListener):

Allure.LIFECYCLE.addListener(new StepListener());
Слушатель работает, но странно - прикрепляет скриншоты, но не к степам, а ко всему тесту.
Если есть вложенные степы, то скриншоты крепятся к родительскому степу.
Кто-нить работает со степами? Как у вас скриншоты цепляются к степам с помощью систенера?

Все просто - Allure вызывает ваш листенер в конце, когда уже зафиксировал окончание Step’а. В итоге скриншот лепится к тесту, а не уже завершенному степу.

Я поднимал этот вопрос на GitHub’е о том, что кастомные листнеры для finished событий нужно выполнять в первую очередь. На данный момент вопрос в процессе решения, надеюсь в ближайших версиях они сделают…

P.S. Либо можете на коленке модифицировать Allure и использовать временно версию с вашими изменениями

1 лайк

Спасибо за подсказку, действительно, подправил порядок вызовов ListenersNotifier для степов в классе Allure из пакета ru.yandex.qatools.allure (Allure Java Adaptor Api). Скрины стали цепляться к степам в нужном месте.

Еще кажется можно написать аспект с помощью aspectJ, как собственно и работают в allure степы и аттачи.

1 лайк

Подскажите пожалуйста, ваш листенер реагирует только на assertы или на любые падения тестов?

Он не для ассертов, он просто для снятия скриншотов в начале степа и в конце (но при условии что степ заканчивается корректно, без ошибки), если есть ошибка при выполнении степа, то срабатывает более общий листенер.