t.me/atinfo_chat Telegram группа по автоматизации тестирования

Selenium Webdriver_timeout: Timed out receiving message from renderer

Теги: #<Tag:0x00007fd767d0f188> #<Tag:0x00007fd767d0f098> #<Tag:0x00007fd767d0ef58>

При запуске тестов возникает следующая проблема:
Тест падает на шаге, выполнение которого составляет минут 10, хотя (см. стек ниже) используется таймаут размером 300 секунд.

В этом шаге осуществляется получение url страницы:

options.addArguments("--no-sandbox", "--headless", "--intl.accept_languages=ru", "--langs=ru", "--window-size=1600,900", "--disable-dev-shm-usage", "--disable-gpu", "--disable-gpu-sandbox");
WebDriver webdriver = new ChromeDriver(options);
webdriver.getCurrentUrl();

Стек ошибки:

org.openqa.selenium.TimeoutException: timeout: Timed out receiving message from renderer: 298,420
 (Session info: headless chrome=86.0.4240.75)
 (Driver info: chromedriver=86.0.4240.22 (398b0743353ff36fb1b82468f63a3a93b4e2e89e-refs/branch-heads/4240@{#378}),platform=Linux 3.10.0-1160.11.1.el7.x86_64 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 426.45 seconds
Build info: version: '2.53.0', revision: '35ae25b1534ae328c771e0856c93e187490ca824', time: '2016-03-15 10:43:46'
System info: host: 'tkli-erib0084.vm.mos.cloud.sbrf.ru', ip: '10.53.49.61', os.name: 'Linux', os.arch: 'amd64', os.version: '3.10.0-1160.11.1.el7.x86_64', java.version: '1.8.0_191'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{mobileEmulationEnabled=false, timeouts={implicit=0, pageLoad=300000, script=30000}, hasTouchScreen=false, platform=LINUX, acceptSslCerts=false, goog:chromeOptions={debuggerAddress=localhost:45579}, acceptInsecureCerts=false, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, setWindowRect=true, unexpectedAlertBehaviour=ignore, applicationCacheEnabled=false, rotatable=false, networkConnectionEnabled=false, chrome={chromedriverVersion=86.0.4240.22 (398b0743353ff36fb1b82468f63a3a93b4e2e89e-refs/branch-heads/4240@{#378}), userDataDir=/tmp/.com.google.Chrome.PHsLnV}, takesHeapSnapshot=true, pageLoadStrategy=normal, strictFileInteractability=false, databaseEnabled=false, handlesAlerts=true, version=86.0.4240.75, browserConnectionEnabled=false, proxy={}, nativeEvents=true, locationContextEnabled=true, cssSelectorsEnabled=true, webauthn:virtualAuthenticators=true}]
Session ID: d4744813497bb55848c9cd3967849181
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
     at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
     at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206)
     at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)
     at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678)
     at org.openqa.selenium.remote.RemoteWebDriver.get(RemoteWebDriver.java:316)

Каким образом можно прервать выполнение теста спустя таймаут?

Установить больший таймаут для загрузки страницы.
driver.set_page_load_timeout(600)
Хотя это больше проблема с сетью что у вас страница за 5 минут не открылась.
Надо смотреть на той машине почему так стенд открывается долго.

Build info: version: '2.53.0' - это Селениум такой у вас? Надо бы свежий использовать.

Как раз не хочется увеличивать таймаут - хочется прервать тест спустя таймауйт = 5 минут (нет смысла продолжать тест, если стен висит).
Вот вопрос как раз в том, как это сделать, потому что сейчас тест прерывается почему-то спустя 10 минут.

У теста есть параметр timeout. Устанавливайте его.
@Test (timeOut = 300 ) // TestNG
@Test (timeout = 300 ) //jUnit

попросите у админов/разрабов выставить апи метод хелсчека и перед запуском тестов делайте запрос. Если ответа нет – то и тесты пусть не запускаются

А зачем такие сложности ?

Вон, BabyRoot уже подсказал.

В принципе, тут оба варианта хорошие, мы не знаем всей картины.
Если стенд не готов - то смысл запускать тесты?
Если стенд готов - то всё равно надо делать ограничение на время выполнения теста, а то такой зависон может просто потратить драгоценное время. Тесты должны быть короткими и быстрыми, даже юайные.

Странно, но тест не прерывается после указанного таймаута, выполняется дальше

Да, тесты запускаются после того, как стенд готов.
Иногда просто возникают зависания.

Пробую использовать

assertTimeout(ofMinutes(1), () -> {
        //код метода
    });

Тест упадет с ошибкой на данном шаге, если он выполнялся больше 1 минуты
Но этот вариант не подходит - т.к. тест упадет только после выполнения шага (который висит по 10 минут), а нужно упасть сразу спустя минуту

Там указываются миллисекунды, пардон, поэтому 5 минут - 300000 надо указать.

Да, указывала в миллисекундах

Очень странно

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