Вышла Selenide 5.3.1

Проверки нового поколения

Блог

Вышла Selenide 5.3.1

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

Всем привет!

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

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

Потому, что мы выпустили 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

The project is maintained by