Превышено время получения сообщения от средства визуализации: 0,100 сообщений журнала с использованием ChromeDriver и Chrome v80 через Selenium Java

39

Недавно мы обновили нашу тестовую среду с помощью ChromeDriver v80.0.3987.16 и Chrome v80.0.3987.87 (официальная сборка) (64-разрядная версия), и после обновления даже минимальная программа выдает много таких журналов SEVERE:

[1581082019.282][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.245][SEVERE]: Timed out receiving message from renderer: 0.100

Ранее эти сообщения наблюдались время от времени до комбо ChromeDriver v79.0 / Chrome v79.0.

Блок минимального кода:

public class chromeDemo 
{
    public static void main(String[] args) 
    {
            System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
            WebDriver driver =  new ChromeDriver();
            driver.get("https://www.google.com/");
            driver.quit();
    }
}

Консольный вывод:

Starting ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs/branch-heads/3987@{#185}) on port 9194
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
Feb 07, 2020 6:56:57 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
[1581082019.282][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.245][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.430][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.531][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.632][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.734][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.835][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082021.364][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082021.544][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082021.647][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082021.748][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082021.850][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082021.952][SEVERE]: Timed out receiving message from renderer: 0.100

Кто-нибудь сталкивается с тем же? Были ли какие-либо изменения в ChromeDriver / Chrome v80 по сравнению с ChromeDriver / Chrome v79? Есть какие-нибудь подсказки?

DebanjanB
источник
7
Я также сталкиваюсь с той же проблемой :(
Sooraj
6
Я получаю ту же проблему, как только мы обновили до v80. Тем не менее, ваш вопрос, вероятно, должен спрашивать, как это исправить, а не спрашивать, сталкивался ли кто-то еще с той же проблемой.
Таплар
2
Я не могу поверить, что этот вопрос был закрыт. Много раз ТАК не помогает как двигатель, чтобы помочь.
Саид Нимати
4
Столкнувшись с точно такой же проблемой. Весь наш автоматизированный код Selenium не работает. И мы не можем понизить рейтинг из-за множества сложностей.
Саид Нимати
2
@DebanjanB Да, я просмотрел ваш пост. Я надеюсь, что они могут исправить это в следующем выпуске. Я попытался найти решение, поэтому упомянул об этом, но есть больше возможностей для предотвращения тайм-аута. Я попробую это с другим вариантом, но если продолжительность тайм-аута очень меньше, я думаю, нам нужно дождаться следующего релиза.
Muzzamil

Ответы:

24

Временное решение

Вот решения для разных вариантов пользователей Chrome .


Постоянное решение

Тем не менее, @bugdroidпредставили фактическое исправление через эту ревизию / фиксацию, которая выглядит следующим образом:

[ChromeDriver] подавляет запись в журнал времени ожидания повторного цикла : r1924789 добавил повторный цикл при ожидании сообщений DevTools. Это спам-логи пользователей с неинформативными отчетами о тайм-аутах. Этот CL подавляет эти сообщения журнала и правильно сообщает значение времени ожидания команды, когда это необходимо.

Примечание :

  • Статус: исправлено
  • Метки: ToBeReleased ChromeDriver-82

история

Это сообщение об ошибке ...

[1581082020.245][SEVERE]: Timed out receiving message from renderer: 0.100

... не обязательно указывает на сбой.

Как упоминает @Tricia , ChromeDriver версии 80 изменил цикл ожидания, чтобы разрешить больше попыток; этот цикл будет генерировать это сообщение, но он продолжает слушать. Однако тег SEVERE для этого сообщения вводит в заблуждение.

Кроме того, в обсуждении проблемы 3332. Тайм- аут повторной попытки, зарегистрированный как серьезный , @triciac [ChromeDriver Committer] также добавил, что команда ChromeDriver добавила небольшой тайм-аут (100 мс), DevToolsClientImpl::HandleEventsUntilчтобы включить дополнительную проверку состояния навигации. Но, к сожалению, когда этот тайм-аут истекает, он регистрируется как SEVERE (by ProcessNextMessage). В случае этого небольшого тайм-аута он не должен регистрироваться как SEVERE , хотя тайм-ауты по- SendCommandInternalпрежнему должны.

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


Немедленное решение

В качестве временного решения вы можете перейти на ChromeDriver v79.0.3945.36, так как кажется, что журналы SEVERE не отображаются в консоли, но вы увидите ПРЕДУПРЕЖДЕНИЕ :

[WARNING]: This version of ChromeDriver has not been tested with Chrome version 80

это звучит как ... безопасное решение ... и было подтверждено членом команды Chromium .

chromedriver79

  • Блок кода:

    public class A_Chrome 
    {
        public static void main(String[] args) 
        {
            System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
            WebDriver driver =  new ChromeDriver();
            driver.get("https://www.google.com/");
            driver.quit();
        }
    }
    
  • Консольный вывод:

    Starting ChromeDriver 79.0.3945.36 (3582db32b33893869b8c1339e8f4d9ed1816f143-refs/branch-heads/3945@{#614}) on port 9200
    Only local connections are allowed.
    Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
    [1581503845.444][WARNING]: This version of ChromeDriver has not been tested with Chrome version 80.
    Feb 12, 2020 4:07:26 PM org.openqa.selenium.remote.ProtocolHandshake createSession
    INFO: Detected dialect: W3C
    

ТЛ; доктор

Вы можете найти пару соответствующих обсуждений в:

DebanjanB
источник
1
Также имейте в виду, что это сообщение журнала, похоже, записано в stderror. После запуска тестов у меня начался сбой скрипта PowerShell, vstest.console.exeпотому что $?переменная PowerShell была, $falseнесмотря на то, что тесты прошли. Похоже, что PowerShell считает, что что-либо, записываемое в stderror, является ошибкой, даже несмотря на то, что $LastExitCodeдля тестового прогона было возвращено ноль.
Грег Бургардт
4
Re: Chrome v80, использующий недавно выпущенный ChromeDriver 80.0.3987.106, решает проблему. Re: Chrome v81, используя недавно выпущенный ChromeDriver 81.0.4044.20, решает проблему. Я все еще вижу проблему с обновлениями ChromeDirver.
Нил
1
Да !!!!! ChromeDriver v79 win32 работает нормально с chrome v80.0.3987.132 и не выдает ошибку TimedOut в консоли. Но иногда Chromedriver не удается запустить сервер.
Суродип
1
Использование обходного пути chromedriver v79 больше не работает с последней версией стабильного Chrome (81.0.4044.92), когда драйвер не может даже открыть Chrome. Я обновил chromedriver до последней версии, и она работает, но вернулись серьезные ошибки тайм-аута.
PST
@PST - точно такие же проблемы. это расстраивает
Шрирам Иланго
10

Основная причина: всякий раз, когда вы загружаете какую-либо страницу с помощью драйвера селена, driverсценарий ожидает, пока страница полностью загрузится. Но иногда веб-драйверу требуется больше времени для загрузки страницы, в этом случае вы увидите TimeoutExceptionисключение в своей консоли.

Решение: если загрузка страницы занимает слишком много времени и вам нужно прекратить загрузку дополнительных подресурсов (изображений, CSS, JS и т. Д.), Вы можете изменить pageLoadStrategy через веб-драйвер.

Ниже код просто загрузите html контент со страницы. Вы можете установить стратегию загрузки страницы из chromeoptions

ChromeOptions options = new ChromeOptions();
options.setPageLoadStrategy(PageLoadStrategy.NONE);

Обновленное решение -2: я согласен с DebanjanB, стратегия PageLoad с None, без загрузки дополнительных файлов (изображений, CSS, JS и т. Д.) Не является хорошей идеей при выполнении тестирования. Я обыскал все проблемы и попытался найти правильное решение. Я попробовал ниже варианты, так как когда-то в какой-то момент он смог решить эту проблему.

    options.addArguments("start-maximized"); 
    options.addArguments("enable-automation"); 
    options.addArguments("--no-sandbox"); 
    options.addArguments("--disable-infobars"); 
    options.addArguments("--disable-dev-shm-usage"); 
    options.addArguments("--disable-browser-side-navigation"); 
    options.addArguments("--disable-gpu");

Никто из них не помог. Но я снова нашел одно решение со стратегией загрузки страницы. На этот раз мы загружаем все подресурсы, но ждем события DOMContentLoaded . Эта стратегия называется Eager . Небольшое определение доступно всем 3 стратегии загрузки страницы

1. normal: эта стратегия заставляет Selenium ждать полной загрузки страницы (загруженный и проанализированный html-контент и субресурсы).

2. Стремление: эта стратегия заставляет Selenium ожидать события DOMContentLoaded (загружается и анализируется только HTML-контент).

3. none: эта стратегия приводит к тому, что Selenium возвращается сразу после полного получения исходного содержимого страницы (загруженного содержимого html).

ПРИМЕЧАНИЕ. По умолчанию, когда Selenium загружает страницу, она следует обычной странице pageLoadStrategy.

Фрагмент кода без использования стратегии загрузки страниц (или нормальный, используемый по умолчанию для selenium)

System.setProperty("webdriver.chrome.driver", "C:\\Users\\...\\LatestDriver\\chromedriver.exe");   
WebDriver driver=new ChromeDriver();
driver.get("http://www.google.com");
driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement el = wait.until(ExpectedConditions.elementToBeClickable(By.name("q")));
el.click();
List <WebElement> allLinks = driver.findElements(By.tagName("a"));
System.out.println(allLinks.size());
driver.quit();

Консольный вывод:

Запуск ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / branch -head / 3987 @ {# 185}) через порт 41540 Разрешены только локальные подключения. Пожалуйста, защитите порты, используемые ChromeDriver и соответствующими тестовыми средами, чтобы предотвратить доступ вредоносного кода. 11 февраля 2020 10:22:12 org.openqa.selenium.remote.ProtocolHandshake createSession INFO: обнаружен диалект: W3C [1581412933.937] [SEVERE]: истекло время ожидания получения сообщения от средства визуализации: 0,100 [1581412934.066] [SEVERE]: время ожидания прием сообщения от средства визуализации: 0,100 [1581412934.168] [SEVERE]: время ожидания получения сообщения от средства визуализации: 0,100 [1581412934.360] [SEVERE]: время ожидания приема сообщения от средства визуализации: 0,100 [1581412934.461] [SEVERE]: время ожидания приема сообщения от средства визуализации: 0,100 [1581412934,618] [СЕРЬЕЗНЫЙ]:

Со Стратегией PageLoad - Eager:

Фрагмент кода:

System.setProperty("webdriver.chrome.driver", "C:\\Users\\...\\LatestDriver\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.setPageLoadStrategy(PageLoadStrategy.EAGER);
WebDriver driver=new ChromeDriver(options);
driver.get("http://www.google.com");
driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement el = wait.until(ExpectedConditions.elementToBeClickable(By.name("q")));
el.click();
List <WebElement> allLinks = driver.findElements(By.tagName("a"));
System.out.println(allLinks.size());
driver.quit();

Консольный вывод:

Запуск ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / branch -head / 3987 @ {# 185}) через порт 1175 Разрешены только локальные подключения. Пожалуйста, защитите порты, используемые ChromeDriver и соответствующими тестовыми средами, чтобы предотвратить доступ вредоносного кода. 11 февраля 2020 10:29:05 org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Обнаруженный диалект: W3C
21

Muzzamil
источник
Как правило, вы не сможете настроить стратегию PageLoad, поскольку конфигурации WebDriver стандартизированы и лучше всего соответствуют требуемой стратегии тестирования. Тем не менее, в обсуждениях Как заставить Selenium не ждать полной загрузки страницы , не ждите загрузки страницы, мы обсудили это подробно. Это проблема с ChromeDriver v80.
DebanjanB
2
@DebanjanB Я согласен с вами, но, как вы знаете, SO - это сообщество, которое решает проблемы. Я попробовал любое лучшее возможное решение, доступное. Если вы знаете , что это ВЫПУСК или BUG хромированного водителя , то мы должны Войти этот вопрос на своем проект Git или рекомендуемое месте. Поднятие вопроса в ТАК не поможет.
Muzzamil
Я недавно обновил свой chrome и chromedriver, а затем начал получать все эти предупреждающие сообщения. Сейчас я пытаюсь понизить мой хром и не могу найти, где взять хром 79v. Может кто-нибудь предоставить мне ссылку для загрузки Chrome 79V
Вин
@ Вина здесь вы можете скачать chromedriver.chromium.org/downloads
Muzzamil