Почему в 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.