Попереднє отримання повідомлення від рендерера: 0,100 повідомлень журналу за допомогою ChromeDriver та Chrome v80 через Selenium Java


38

Нещодавно ми оновили тестове середовище за допомогою ChromeDriver v80.0.3987.16 та Chrome v80.0.3987.87 (Official Build) (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? Будь-які підказки?


7
Я також стикаюся з тим же питанням :(
Sooraj

6
Я отримую те саме питання, коли ми перейшли на v80. Хоча, напевно, у вашому питанні слід запитати, як його виправити, а не питати, чи хтось ще стикається з тією ж проблемою.
Тапляр

2
Я не можу повірити, що це питання було закрито. Багато разів ТА не вдається як двигун допомогти.
Саїд Неаматі

4
Зіткнувшись з точно таким же питанням. Весь наш автоматизований код селену зламаний. І ми не можемо погіршити роботу через велику складність.
Saeed Neamati

2
@DebanjanB Так, я переглянув вашу посаду. Сподіваюся, вони зможуть виправити це в наступному випуску. Я спробував знайти рішення, щоб я його згадав, але є більше варіантів, щоб запобігти тайм-ауту. Я спробую це з іншим варіантом, але якщо тривалість тайм-ауту буде значно меншою, то я думаю, що нам потрібно чекати наступного випуску.
Муццаміль

Відповіді:


24

Тимчасове рішення

Ось рішення для різних варіантів користувачів 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, вам потрібно забрати конкретні бінарні файли платформи:

Постійне рішення

Однак @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 Committee] також додав, що команда 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 .

хромедрівер79

  • Блок коду:

    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
    

тл; доктор

Ви можете знайти кілька відповідних дискусій у:


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
Використання Chromeedriver v79 не дозволяє працювати з останньою версією стабільного хрому (81.0.4044.92), коли драйвер не може навіть відкрити хром. Я оновив Chromeedriver до останнього, і він працює, але повернулися серйозні помилки таймауту.
PST

@PST - точно такі ж проблеми. це засмучує.
Шрірам Іланго

10

Причинна причина: Щоразу, коли ви завантажуєте якусь сторінку за допомогою драйвера селену, тоді driverсценарій очікування до повного завантаження сторінки. Але колись webdriver потребує більше часу для завантаження сторінки, у такому випадку ви побачите TimeoutExceptionвиняток у своїй консолі.

Рішення: Коли завантаження сторінки займає занадто багато часу, і вам потрібно припинити завантаження додаткових субресурсів (зображень, css, js тощо), ви можете змінити сторінкуLoadStrategy через веб-диск.

Нижче коду просто завантажте вміст 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. нормально: Ця стратегія змушує Selenium дочекатися повного завантаження сторінки (завантаження та аналіз синтаксису та допоміжних ресурсів html).

2. нетерплячий: ця стратегія змушує Selenium чекати події DOMContentLoaded (вміст, завантажений і розроблений html).

3. немає: Ця стратегія викликає повернення Selenium одразу після повного отримання початкового вмісту сторінки (завантажений вміст html).

ПРИМІТКА. За замовчуванням, коли Selenium завантажує сторінку, вона дотримується звичайної сторінкиLoadStrategy.

Фрагмент коду без використання стратегії завантаження сторінки (або Звичайний, як використовується селен за замовчуванням)

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-heads / 3987 @ {# 185}) на порту 41540 Дозволено лише локальне з'єднання. Будь ласка, захистіть порти, які використовує ChromeDriver та пов’язані з ними тестові рамки для запобігання доступу шкідливим кодом. 11 лютого 2020 10:22:12 AM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Виявлений діалект: W3C [1581412933.937] [SEVERE]: Визначено прийом повідомлення від рендерінга: 0.100 [1581412934.066] [СЕВЕР]: Вимкнено отримання повідомлення від рендерінга: 0.100 [1581412934.168] [СЕВЕРЕ]: Вимкнено прийом повідомлення від рендерінга: 0.100 [1581412934.360] [СЕВЕРЕ]: Вимкнено прийом повідомлення від рендерінга: 0.100 [1581412934.461] [СЕВЕРЕ]: Вимкнено прийом повідомлення від рендерінга: 0,100 [1581412934.618] [СЕВЕР]:

За допомогою стратегії завантаження сторінки - прагнення:

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

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-heads / 3987 @ {# 185}) на порту 1175 Дозволено лише локальне з'єднання. Будь ласка, захистіть порти, які використовує ChromeDriver та пов'язані з ними тестові рамки, щоб запобігти доступу шкідливим кодом. 11 лютого 2020 р. 10:29:05 org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Виявлений діалект: W3C
21


Як правило, ви не зможете налаштувати стратегію PageLoad, оскільки конфігурації WebDriver стандартизовані та найкраще відповідають необхідній тестовій стратегії. Однак у дискусіях Як змусити Selenium не чекати до повного завантаження сторінки , не чекайте завантаження сторінки, ми обговорили її детально. Це проблема з ChromeDriver v80.
DebanjanB

2
@DebanjanB Я згоден з вами, але, як ви знаєте, так це громада збирається вирішувати проблеми. Я спробував все можливе найкраще рішення. Якщо ви знаєте, що це ISSUE або BUG у драйвері chrome, ми повинні зареєструвати цю проблему на їхньому проекті Git або рекомендованому місці. Поставити питання в ТА не допоможе.
Муццаміль

Нещодавно я оновив хром і хромодрук, а потім почав отримувати всі ці попереджувальні повідомлення. Зараз я намагаюся зменшити свій хром і не можу знайти, де взяти хром 79v. Може хто - то надати мені посилання на скачування хром 79v
Vin

@Vin тут можна завантажити chromedriver.chromium.org/downloads
Muzzamil
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.