Время ожидания получения сообщения от средства визуализации: 0,100 сообщений журнала с использованием ChromeDriver и от Chrome v80 до Selenium Java - PullRequest
39 голосов
/ 07 февраля 2020

Недавно мы обновили нашу тестовую среду с помощью 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? Любые подсказки?

Ответы [ 2 ]

24 голосов
/ 09 февраля 2020

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

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

  • Если вы используете Chrome v80 , с использованием недавно выпущенного ChromeDriver 80.0.3987.106 решает проблему.

    • Блок кода:

      System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
      WebDriver driver =  new ChromeDriver();
      driver.quit();
      
    • Консольный вывод:

      Starting ChromeDriver 80.0.3987.106 (f68069574609230cf9b635cd784cfb1bf81bb53a-refs/branch-heads/3987@{#882}) on port 20041
      Only local connections are allowed.
      Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
      Feb 14, 2020 9:50:57 PM org.openqa.selenium.remote.ProtocolHandshake createSession
      INFO: Detected dialect: W3C
      
  • Если вы используете Chrome v81 , используя недавно выпущенный ChromeDriver 81.0.4044.20 решает проблему.

  • Если вы используете Chrome из Dev или Canary канала, вам нужно забрать спецификация платформы c двоичные файлы:

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

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

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

Примечание :

  • Статус: фиксированный
  • Метки: ToBeReleased ChromeDriver-82

История

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

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

... не обязательно означает сбой.

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

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

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


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

В качестве временного решения вы можете понизить версию до 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
    

tl; dr

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

10 голосов
/ 09 февраля 2020

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

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

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

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

Обновленное решение -2: Я согласен с DebanjanB, стратегия PageLoad с None, без загрузки дополнительных файлов ( images, css, js et c) не очень хорошая идея при выполнении тестирования. Я обыскал все проблемы и попытался найти правильное решение. Я попробовал описанные ниже варианты, так как когда-нибудь когда-нибудь удалось решить эту проблему.

    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. eager: Эта стратегия заставляет 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] [SEVERE]: истекло время получения сообщения от средства визуализации: 0.100 [1581412934.719] [SEVERE]: истекло время получения сообщения от средства рендеринга: 0.100 [1581412934.820] [SEVERE]: время ожидания полученного сообщения от средства рендеринга: 0.100 [1581412934.922] SEVERE]: Превышено время ожидания получения сообщения от средства визуализации: 0,100 [1581412935.097] [SEVERE]: Превышено время ожидания получения сообщения от средства визуализации: 0,100 21

При использовании стратегии 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: обнаруженный диалект: W3 C
21

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