Недавно мы обновили нашу тестовую среду с помощью 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? Есть какие-нибудь подсказки?
Ответы:
Временное решение
Вот решения для разных вариантов пользователей Chrome .
Если вы используете Chrome v80 , решение этой проблемы решает использование недавно выпущенного ChromeDriver 80.0.3987.106 .
Блок кода:
Консольный вывод:
Если вы используете Chrome v81 , то решение этой проблемы решает использование недавно выпущенного ChromeDriver 81.0.4044.20 .
Постоянное решение
Тем не менее,
@bugdroid
представили фактическое исправление через эту ревизию / фиксацию, которая выглядит следующим образом:Примечание :
история
Это сообщение об ошибке ...
... не обязательно указывает на сбой.
Как упоминает @Tricia , ChromeDriver версии 80 изменил цикл ожидания, чтобы разрешить больше попыток; этот цикл будет генерировать это сообщение, но он продолжает слушать. Однако тег SEVERE для этого сообщения вводит в заблуждение.
Кроме того, в обсуждении проблемы 3332. Тайм- аут повторной попытки, зарегистрированный как серьезный , @triciac [ChromeDriver Committer] также добавил, что команда ChromeDriver добавила небольшой тайм-аут (100 мс),
DevToolsClientImpl::HandleEventsUntil
чтобы включить дополнительную проверку состояния навигации. Но, к сожалению, когда этот тайм-аут истекает, он регистрируется как SEVERE (byProcessNextMessage
). В случае этого небольшого тайм-аута он не должен регистрироваться как SEVERE , хотя тайм-ауты по-SendCommandInternal
прежнему должны.Таким образом, ChromeDriver нужен способ лучше контролировать ведение журнала, возможно, путем увеличения времени ожидания. Однако, если время ожидания команды наконец истекло, указанная продолжительность тайм-аута очень мала, тогда вместо этого необходимо указать пользовательское время ожидания.
Немедленное решение
В качестве временного решения вы можете перейти на ChromeDriver v79.0.3945.36, так как кажется, что журналы SEVERE не отображаются в консоли, но вы увидите ПРЕДУПРЕЖДЕНИЕ :
это звучит как ... безопасное решение ... и было подтверждено членом команды Chromium .
Блок кода:
Консольный вывод:
ТЛ; доктор
Вы можете найти пару соответствующих обсуждений в:
источник
vstest.console.exe
потому что$?
переменная PowerShell была,$false
несмотря на то, что тесты прошли. Похоже, что PowerShell считает, что что-либо, записываемое в stderror, является ошибкой, даже несмотря на то, что$LastExitCode
для тестового прогона было возвращено ноль.Основная причина: всякий раз, когда вы загружаете какую-либо страницу с помощью драйвера селена,
driver
сценарий ожидает, пока страница полностью загрузится. Но иногда веб-драйверу требуется больше времени для загрузки страницы, в этом случае вы увидитеTimeoutException
исключение в своей консоли.Решение: если загрузка страницы занимает слишком много времени и вам нужно прекратить загрузку дополнительных подресурсов (изображений, CSS, JS и т. Д.), Вы можете изменить pageLoadStrategy через веб-драйвер.
Ниже код просто загрузите html контент со страницы. Вы можете установить стратегию загрузки страницы из chromeoptions
Обновленное решение -2: я согласен с DebanjanB, стратегия PageLoad с None, без загрузки дополнительных файлов (изображений, CSS, JS и т. Д.) Не является хорошей идеей при выполнении тестирования. Я обыскал все проблемы и попытался найти правильное решение. Я попробовал ниже варианты, так как когда-то в какой-то момент он смог решить эту проблему.
Никто из них не помог. Но я снова нашел одно решение со стратегией загрузки страницы. На этот раз мы загружаем все подресурсы, но ждем события DOMContentLoaded . Эта стратегия называется Eager . Небольшое определение доступно всем 3 стратегии загрузки страницы
1. normal: эта стратегия заставляет Selenium ждать полной загрузки страницы (загруженный и проанализированный html-контент и субресурсы).
2. Стремление: эта стратегия заставляет Selenium ожидать события DOMContentLoaded (загружается и анализируется только HTML-контент).
3. none: эта стратегия приводит к тому, что Selenium возвращается сразу после полного получения исходного содержимого страницы (загруженного содержимого html).
ПРИМЕЧАНИЕ. По умолчанию, когда Selenium загружает страницу, она следует обычной странице pageLoadStrategy.
Фрагмент кода без использования стратегии загрузки страниц (или нормальный, используемый по умолчанию для selenium)
Консольный вывод:
Со Стратегией PageLoad - Eager:
Фрагмент кода:
Консольный вывод:
источник