Скипаются тесты с ошибкой: Chrome failed to start: exited abnormally. (unknown error: DevToolsActivePort file doesn't exist)

Теги: #<Tag:0x00007f7384cb94a0> #<Tag:0x00007f7384cb93d8> #<Tag:0x00007f7384cb9310> #<Tag:0x00007f7384cb9248>

Привет.

После явной установки нужной версии WebDriver на CI начала появляться следующая ошибка:

[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running TestSuite
2021-06-15 12:12:48 [main] INFO io.github.bonigarcia.wdm.WebDriverManager - Please answer the following questionnaire based on your experience with WebDriverManager. Thanks a lot!
2021-06-15 12:12:48 [main] INFO io.github.bonigarcia.wdm.WebDriverManager - ====> http://tiny.cc/wdm-survey <====
2021-06-15 12:12:48 [main] INFO io.github.bonigarcia.wdm.WebDriverManager - Exporting webdriver.chrome.driver as /home/circleci/.m2/repository/webdriver/chromedriver/linux64/91/chromedriver
2021-06-15 12:12:48 [main] INFO com.codeborne.selenide.impl.WebDriverThreadLocalContainer - No webdriver is bound to current thread: 1 - let's create a new webdriver
2021-06-15 12:12:49 [main] INFO org.littleshoot.proxy.impl.DefaultHttpProxyServer - Starting proxy at address: 0.0.0.0/0.0.0.0:0
2021-06-15 12:12:49 [main] INFO org.littleshoot.proxy.impl.DefaultHttpProxyServer - Proxy listening with TCP transport
2021-06-15 12:12:49 [main] INFO org.littleshoot.proxy.impl.DefaultHttpProxyServer - Proxy started at address: /0.0.0.0:34865
2021-06-15 12:12:49 [main] INFO com.codeborne.selenide.webdriver.AbstractDriverFactory - Write webdriver logs to: /home/circleci/project/ParleyPro Autotests/ScreenshotsOfFailedTests/webdriver.1623759169715_2031_1.log
Starting ChromeDriver 91.0.4472.101 (af52a90bf87030dd1523486a1cd3ae25c5d76c9b-refs/branch-heads/4472@{#1462}) on port 25057
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
[ERROR] Tests run: 18, Failures: 1, Errors: 0, Skipped: 17, Time elapsed: 2.552 s <<< FAILURE! - in TestSuite
[ERROR] setup(tests.LoginToDashboard)  Time elapsed: 2.336 s  <<< FAILURE!
org.openqa.selenium.WebDriverException: 
unknown error: Chrome failed to start: exited abnormally.
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'd37b5e30839d', ip: '172.25.0.3', os.name: 'Linux', os.arch: 'amd64', os.version: '4.15.0-1102-aws', java.version: '1.8.0_222'
Driver info: driver.version: SelenideDriver

И из за этого у меня скипается весь сьют со всеми тестами.

Выставил у себя:

WebDriverManager.chromedriver().driverVersion("91").setup();
        System.setProperty("chromeoptions.args", "--no-sandbox");

но, похоже, это не решило проблему.
Подскажите, кто уже сталкивался с этим ранее ?

Вот код где происходит Setup перед началом тестов:

@BeforeSuite
    private void setup()
    {
        Configuration.proxyEnabled   = true;
        Configuration.fileDownload   = FileDownloadMode.PROXY;
        Configuration.startMaximized = true;
        Configuration.timeout = 10_000;

        WebDriverManager.chromedriver().driverVersion("91").setup();
        System.setProperty("chromeoptions.args", "--no-sandbox");
        Configuration.browserCapabilities.setCapability("acceptInsecureCerts", true);
        //Configuration.headless = true; //headless off

        Const.DOWNLOAD_DIR.mkdirs();
        Const.SCREENSHOTS_DIR.mkdirs();

        Configuration.downloadsFolder = Const.DOWNLOAD_DIR.getAbsolutePath();
        Configuration.reportsFolder   = Const.SCREENSHOTS_DIR.getAbsolutePath();

        open(Const.QA_TENANT_URL);
        // headless mode: need to set window size for correct running
        //WebDriverRunner.getWebDriver().manage().window().setSize(new Dimension(1920, 1080));
    }

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

А вообще, правильно ли я параметры передаю в инстанс драйвера ? Терзают меня смутные сомнения.

Процесс google-chrome не запускается или падает. Мы тут вряд ли можем вам помочь.
Попробуйте зайти на этот сервер через SSH и запустить команду /usr/bin/google-chrome с такими же параметрами.

P.S. Я рекомендую

  1. НЕ ставить startMaximized = true
  2. Проставить размер экрана через Configuration.browserSize = "1920x1080";
  3. НЕ ставить --no-sandbox и acceptInsecureCerts - селенид это делает по умолчанию
  4. Скорее всего НЕ нужно ставить Configuration.downloadsFolder и Configuration.reportsFolder - селенид и так проставляет разумные значения
  5. Обновиться на последнюю версию Selenide 5.22.0

Спасибо за оперативный ответ.
Последовал советам, но не помогло :frowning:

Также выставил такое:

System.setProperty("chromeoptions.args", "\"--no-sandbox\",\"--disable-dev-shm-usage\",\"--remote-debugging-port=9222\"");

Все равно нет нет да получаю на некоторых сьютах:

[INFO] Running TestSuite
2021-06-16 08:18:31 [main] INFO io.github.bonigarcia.wdm.WebDriverManager - Please answer the following questionnaire based on your experience with WebDriverManager. Thanks a lot!
2021-06-16 08:18:31 [main] INFO io.github.bonigarcia.wdm.WebDriverManager - ====> http://tiny.cc/wdm-survey <====
2021-06-16 08:18:32 [main] INFO io.github.bonigarcia.wdm.WebDriverManager - Exporting webdriver.chrome.driver as /home/circleci/.m2/repository/webdriver/chromedriver/linux64/91/chromedriver
2021-06-16 08:18:32 [main] INFO com.codeborne.selenide.impl.WebDriverThreadLocalContainer - No webdriver is bound to current thread: 1 - let's create a new webdriver
2021-06-16 08:18:32 [main] INFO org.littleshoot.proxy.impl.DefaultHttpProxyServer - Starting proxy at address: 0.0.0.0/0.0.0.0:0
2021-06-16 08:18:32 [main] INFO org.littleshoot.proxy.impl.DefaultHttpProxyServer - Proxy listening with TCP transport
2021-06-16 08:18:33 [main] INFO org.littleshoot.proxy.impl.DefaultHttpProxyServer - Proxy started at address: /0.0.0.0:33307
2021-06-16 08:18:33 [main] INFO com.codeborne.selenide.webdriver.AbstractDriverFactory - Write webdriver logs to: /home/circleci/project/ParleyPro Autotests/ScreenshotsOfFailedTests/webdriver.1623831513059_9292_1.log
Starting ChromeDriver 91.0.4472.101 (af52a90bf87030dd1523486a1cd3ae25c5d76c9b-refs/branch-heads/4472@{#1462}) on port 17865
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
[ERROR] Tests run: 9, Failures: 1, Errors: 0, Skipped: 8, Time elapsed: 3.612 s <<< FAILURE! - in TestSuite
[ERROR] setup(tests.LoginToDashboard)  Time elapsed: 3.396 s  <<< FAILURE!
org.openqa.selenium.WebDriverException: 
unknown error: Chrome failed to start: exited abnormally.
  (chrome not reachable)
  (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'd1fe3f6d8e2d', ip: '172.27.0.3', os.name: 'Linux', os.arch: 'amd64', os.version: '4.15.0-1102-aws', java.version: '1.8.0_222'
Driver info: driver.version: SelenideDriver
selenide.url: https://qa-autotests.parleypro.net/master/index.html
selenide.baseUrl: http://localhost:8080
remote stacktrace: #0 0x559124b10949 <unknown>

	at tests.LoginToDashboard.setup(LoginToDashboard.java:42

Чё делать то ? :confused:

Мда, спешу поделиться решением.

Как выяснилось, это проблема chromedriver только под Ubuntu под докером. И вроде как она пока не вылечена.

Ни System.setProperty( “chromeoptions.args”, “–no-sandbox --disable-dev-shm-usage” );
ни включение headless режима
ни прочие пляски с бубном не позволили от неё избавиться.

Решение:

private final static int MAX_RETRY_COUNT = 5;

int retryCount = 0;
        while(true)
        {
            try
            {
                open(Const.QA_TENANT_URL);
                break;
            }
            catch(WebDriverException e)
            {
                if( retryCount > MAX_RETRY_COUNT )
                {
                    throw new RuntimeException("Too many retries...", e);
                }

                logger.warn("encountered exception : ", e);
                logger.warn("Trying again...");

                retryCount++;
                try
                {
                    Thread.sleep(2_000);
                }
                catch (InterruptedException interruptedException)
                {
                    interruptedException.printStackTrace();
                }
                continue;
            }
        }

Т.е. просто обрабатываем checked exceptions и снова делаем вызов open(URL).

Не благодарите :slight_smile: