Автоматическое скачивание chromedriver при несовместимости версии с браузером

Добрый день! Не смог найти нужную тему (но по моему что то похожее было).
Ситуация распространенная: при обновлении браузера тесты перестают запускаться по причине несовместимости версий хромдрайвера и браузера (This version of ChromeDriver only supports Chrome version…)
Вопрос: предусмотрено ли решение этой проблемы в Selenide?

Если у вас достаточно свежая версия селенида, такой проблемы не должно быть.
А у вас какая?

У меня 6.6.3 версия

И это явно не последняя, правда же?

Почитал описание релизов после версии 6.6.3, но не нашел упоминаний о моей проблеме)
Вы говорите загадками) Что реализовано в последней версии Selenide для решения этой проблемы?

Обновился до последней версии, проверил три случая:

  1. Когда версия браузера старше версии хромдрайвера на один (111/110)
  2. Когда версия браузера старше версии хромдрайвера на три (111/108)
  3. Когда версия браузера младше версии хромдрайвера на один (111/112)
    Итоги:
    В первом пункте селенид увидел, что версии не совпадают, но запустить браузер смог
    Во втором и третьем пункте тест упал:
    Второй пункт:

    Третий пункт:

Погодите, а как это вообще получается, что версии браузера и хромдрайвера у вас не совпадают?
Вы сами, что ли, устанавливаете версию хромдрайвера? А зачем?

Селенид (а точнее, WebDriverManager) сам узнаёт, какой версии браузер у вас установлен, и скаичает соответствующую версию вебдрайвера. Поэтому они обычно совпадают.

Да, у нас в папке driver лежит chromedriver.exe нужной версии (совпадающей с версией браузера). (эта папка прописана в Path в переменных средах)
И когда у нас обновляется браузер тесты начинают падать (мы вручную скачиваем новый хромдрайвер и обновляем его в папке)
А что то дополнительно нужно сделать, чтобы селенид сам скачивал драйвер? и + он это сделает один раз и далее будет ссылаться на уже скачанный, или будет для каждого автотеста каждый раз скачивать его? (У меня инициализация драйвера реализована в методе @BeforeEach интерфейса BeforeEachCallBack (Junit5)

Ну блин, это ж натуральный фейспалм… :slight_smile:

Чтобы селенид сам скачивал вебдрайвер, ничего дополнительно делать не надо.
Просто удалите все ваши хаки.
Удалите папку driver.
Селенид будет сам скачивать нужную версию вебдрайвера при каждом открытии браузера. Но результат кэшировать, так что это будет быстро.

1 лайк

А в многопотоке как будет производиться скачивание? Для каждого потока отдельно каждый раз?

вы погуглите как работает хромдрайвер, у вас уже в многопотоке один файл запускается кучу раз, занимая разные порты; да и селенид с драйвер манагером написаны с учётом многопоточности

1 лайк

Нет, конечно. Я же говорю: скачался - закэшировался.

Я на данный момент не могу это выпилить, т.к вебдрайвер из этой папки используется у кого то еще. А можно ли как то (локально) сэмулировать отсутствие скачанного вебдрайвера, не удаляя папку и вебдрайвер в нем?

у вас git нету что-ли?

Конечно, файл можете не удалять. Главное - не используйте его.

Если используете Python для написания тестов, то можно использовать библиотеку Web Driver Manager https://github.com/SergeyPirogov/webdriver_manager