Вышла Selenide 5.3.1

Вышла Selenide 5.3.1

Мавен сожрал скриншоты
07.09.19

Всем привет!

На днях случилась сенсация.

Презентация нового айфона прошла незамеченной!

Потому, что мы выпустили Selenide 5.3.1. Тоже с улучшенными снимками :)

В этой версии мы исправили ровно одну проблему, зато какую!


Maven, где мои скриншоты?

Недавно мы обнаружили, что пользователи мавена и свежего maven-surefire-plugin:2.22.2 были лишены одной из самых важных фич селенида: имя скриншота не добавлялось к сообщению об ошибке при падении теста.

Вот это нежданчик!

Как вы вообще жили без этого, бедняги?

Может, поэтому вы так упарываетесь по BDD, Серенити и Аллюру?


Для сравнения

Вот как выглядит сообщение об ошибке при падении теста в Maven и последнем maven-surefire-plugin:2.22.2:

com.codeborne.selenide.ex.ListSizeMismatch: 
: expected: = 11, actual: 0, collection: .results
Elements: []
	at org.selenide.GoogleTest.openGoogle(GoogleTest.java:42)

Вы видите скриншот? И я не вижу. А он есть.

А вот как выглядит ошибка в Gradle, Ant, любой IDE и дефалтовом maven-surefire-plugin:2.12.4:

List size mismatch. Expected: = 11, actual: 0, collection: .results
Elements: []
Screenshot: file:/Users/andrei/projects/selenide-examples/sandbox-selenide-junit5/build/reports/tests/1567803355181.0.png
Page source: file:/Users/andrei/projects/selenide-examples/sandbox-selenide-junit5/build/reports/tests/1567803355181.0.html
Timeout: 4 s.
	at org.selenide.GoogleTest.openGoogle(GoogleTest.java:42)

Теперь при падении теста вы сразу видите скриншот и код странички. Этого достаточно, чтобы изучить причину падения. Не нужны больше никакие “красивые” отчёты и прочая усложнятина.

Жизнь заиграла совсем другими красками, правда?


Расследование

Но почему так получилось?

  1. В Java есть класс Throwable, от которого наследуются все ошибки.
  2. В нём есть два метода: getMessage() и toString().
  3. По умолчанию toString() = имя класса + getMessage()

Например, такой код:

    Throwable e = new IllegalArgumentException("низя");
    System.out.println(e.getMessage());
    System.out.println(e.toString());

выдаёт:

    низя
    java.lang.IllegalArgumentException: низя

Фокус в том, что изначально Selenide добавлял имя скриншота именно в методе UIAssertionError.toString(). И это прекрасно работало в Gradle, Ant, всех IDE. Да и в Maven тоже - в дефалтовом maven-surefire-plugin.


Что же обновилось в Maven?

В Maven вообще сидят весёлые ребята.

  1. В Maven для тестов зачем-то два плагина, а не один.
  2. Называются они почему-то “surefire”, а не какой-нибудь “test”, что было бы всем понятно.
  3. И по умолчанию последний Maven 3.6.2 почему-то использует разные версии этих плагинов:
    • maven-surefire-plugin:2.12.4 - выпущена 7 лет назад (например, не поддерживает Java 11)
    • и внезапно
      maven-surefire-report-plugin:3.0.0-M3 - типа бета-версия, как бы ещё сырая


Но вот если прописать в своём pom.xml более новую версию плагина:

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.22.2</version>
      </plugin>

то начинаются чудеса. Вместо e.toString() он теперь зачем-то использует имя класса + getMessage(). Вот поэтому скриншоты и не добавляются больше к отчёту.


Как исправили?

Теперь мы добавляем скриншот в методе e.getMessage(), а не e.toString(). Звучит просто, но нам пришлось перелопатить все классы ошибок в Selenide и исправить кучу тестов.

Возможно, что-то получилось неидеально, поэтому смело рапортуйте, если найдёте шероховатости!

Всю предысторию и изменения кода можно найти здесь:


Новости

Селенид шагает по планете!


Конференции

Приходите на конференцию QA Fest в Киеве 20-21 сентября!

Говорят, это крупнейшая конференция по тестированию в Украине. 5 потоков!
Много крутых спикеров и спикерш.

У меня будет два доклада:

  • “Селенид для продвинутых”
    (параллелизация, статика, листенеры, прокси, трюки с JavaScript, производительность)
  • “10 причин моей ненависти”
    (TestNG, репорты, пэдж обжекты, try/catch, ифы в тестах, dependency injection, spring и OverKISS)

Будет подгорать!


Андрей Солнцев

ru.selenide.org

07.09.19