Тесты падают с ошибкой org.openqa.selenium.WebDriverException: unknown error: cannot find Chrome binary

Использую следующую архитектуру Gradle+Selenide+TestNg+Selenoid .Перешёл с JUnit на TestNg и теперь при тестировании появляется такая ошибка

org.openqa.selenium.WebDriverException: unknown error: cannot find Chrome binary
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'aefda8d05b43', ip: '172.20.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '4.19.0-9-amd64', java.version: '1.8.0_171'
Driver info: driver.version: SelenideDriver
selenide.url: https://testing2.ros.chat:1110/
selenide.baseUrl: https://testing2.ros.chat:1110
remote stacktrace: #0 0x5608a5a81579 <unknown>

Думал дело в selenoid, но они ответили, что дело в selenide. Когда использовал JUnit такой проблемы не возникало

Версия TestNg и Selenide

// https://search.maven.org/artifact/org.testng/testng
    compile 'org.testng:testng:7.1.0'

    //dependencies for selenium
    // https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java
    compile group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '3.141.59'
    // https://mvnrepository.com/artifact/com.codeborne/selenide
    compile group: 'com.codeborne', name: 'selenide', version: '5.4.1'
    // https://mvnrepository.com/artifact/ru.stqa.selenium/webdriver-factory
    compile group: 'ru.stqa.selenium', name: 'webdriver-factory', version: '4.3'

Проблема возникает как при запуске тестов в одной потоке, так при запуске нескольких потоков. А также иногда стала появляться такая ошибка. Причём, некоторые тесты отрабатывают без ошибок.

java.lang.IllegalStateException: No webdriver is bound to current thread: 10. You need to call open(url) first.

Тесты запускаются в Jenkins. Может у кого была такая проблема?

ну почему-то тесты не могут найти бинарников браузера для хромдрайвера
можно в опциях зашить путь до экзешника, и тогда уже если будет падать - ковыряться дальше с проблемой

Пока искал решение проблемы, нашёл официальную поддержку Selenide. Может кому пригодится

А ещё обнаружил, что неправильно запускал selenoid через docker-compose.
Мой старый docker-compose

version: '3.2'
services:
  selenoid:
    restart: always
    network_mode: bridge
    image: aerokube/selenoid:latest
    container_name: "selenoid"
    volumes:
      - "$PWD/selenoid:/etc/selenoid"
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "$PWD/selenoid/video:/opt/selenoid/video"
      - "$PWD/selenoid/logs:/opt/selenoid/logs"
    environment:
      - OVERRIDE_VIDEO_OUTPUT_DIR=$PWD/selenoid/video
    command: ["-conf", "/etc/selenoid/browsers.json", "-video-output-dir", "/opt/selenoid/video", "-log-output-dir", "/opt/selenoid/logs"]
    ports:
      - "4444:4444"

Правильный запуск из официальной документации

И ответили в поддержке selenoid

we removed $PWD from docs

Может в этом кроется ошибка.

В поддержке Selenoid ответили следующее

Сам дурак, selenoid и selenide прекрасно работают. Пиши код нормально и всё будет работать)

at chat.ros.testing2.TestsBase.openMS(TestsBase.java:107)
at chat.ros.testing2.server.TestServerPage.beforeTest(TestServerPage.java:34)

Вообщем мой говнокод пытается запустить почему-то бинарник на машине, а не в докере, его там нет и соответственно код падает. Хотя это проявляется не всегда, поэтому исправить думаю будет непросто

2 лайка

Проблема была действительно в моём коде. После того, как добавил сохранение instance класса, в котором инициализируется драйвер, после 5 прогонов ошибка не повторялась.

Отличная тема!
Сам запостил, сам разобрался, сам решил! :slight_smile:

5 лайков