Почему в 3.3.1 перестали работать предикаты в явных ожиданиях?

Почему в 3.3.1 перестали работать предикаты в явных ожиданиях?

После обновления Java-библиотеки Selenium до версии 3.3.1 пользователи, у которых были созданы свои собственные условия для явных ожиданий, заметили, что они перестали работать.

Что произошло? И, главное, что делать?

Обновите в своём проекте зависимость от Guava до версии 21 и проблема должна исчезнуть.

TL;DR

И всё таки, что же случилось?

Java-библиотека Selenium начиная с версии 3.0 работает только в Java 8. Это позволяет разработчикам использовать новые возможности, которые появились в Java 8.

В частности, было бы логично, если бы в функцию WebDriverWait.until(...) можно было передавать лямбда-выражения.

Исторически так сложилось, что эта функция принимала на вход значения классов Function, Predicate или Supplier из библиотеки Guava. Для того, чтобы написать “самодельное” ожидание, нужно было реализовать один из этих интерфейсов. Поэтому мы не могли просто взять и изменить функцию until, чтобы она использовала для параметров одноимённые классы из Java 8 – все уже написанные ожидания перестали бы работать.

К счастью, в версии Guava 21 перечисленные классы стали наследоваться от соответствующих стандартных классов Java 8.

Поэтому мы поменяли интерфейс функции until, теперь она принимает значения классов Function, Predicate или Supplier из стандартной библиотеки Java.

Если у вас уже есть самодельные условия ожидания, которые реализуют, скажем, Predicate из Guava, и вы используете старую версию Guava – вы не сможете передать такое условие в функцию until, типы не совместимы.

Но после обновления Guava до версии 21 эта несовместимость пропадает. Вы можете продолжать использовать написанные ранее ожидания, а также делать новые без использования Guava.

 БЛОГ