Atualizamos recentemente nosso ambiente de teste com o ChromeDriver v80.0.3987.16 e o Chrome v80.0.3987.87 (versão oficial) (64 bits) e após a atualização, mesmo o programa mínimo está produzindo muitos desses logs SEVEROS:
[1581082019.282][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.245][SEVERE]: Timed out receiving message from renderer: 0.100
No início, essas mensagens eram observadas ocasionalmente até com o ChromeDriver v79.0 / Chrome v79.0 combo.
Bloco de código mínimo:
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();
}
}
Saída do console:
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
Alguém enfrentando o mesmo? Houve alguma alteração no ChromeDriver / Chrome v80 em relação ao ChromeDriver / Chrome v79? Alguma pista?
Respostas:
Solução provisória
Aqui estão as soluções para diferentes variantes de usuários do Chrome .
Se você estiver usando o Chrome v80 , o ChromeDriver 80.0.3987.106 lançado recentemente resolve o problema.
Bloco de código:
Saída do console:
Se você estiver usando o Chrome v81 , o ChromeDriver 81.0.4044.20 lançado recentemente resolve o problema.
Solução permanente
No entanto,
@bugdroid
submeteu a correção real por meio desta revisão / confirmação , da seguinte maneira:Nota :
História
Esta mensagem de erro ...
... não indica necessariamente uma falha.
Como o @Tricia menciona isso, o ChromeDriver Versão 80 modificou um loop de espera para permitir mais tentativas; esse loop gera essa mensagem, mas continua a ouvir. No entanto, a etiqueta GRAVE para essa mensagem é enganosa.
Além disso, na discussão da edição 3332: o tempo limite de nova tentativa registrado como grave , o @triciac [ChromeDriver Committer] também adicionou que a equipe do ChromeDriver adicionou um pequeno tempo limite (100 ms)
DevToolsClientImpl::HandleEventsUntil
para permitir uma verificação adicional do status da navegação. Infelizmente, quando esse tempo limite expirou, ele é registrado como SEVERE (porProcessNextMessage
). No caso desse pequeno tempo limite, ele não deve registrar como SEVERO , embora o tempo limiteSendCommandInternal
ainda deva.Portanto, o ChromeDriver precisa de uma maneira de controlar o log de uma maneira melhor, possivelmente aumentando o tempo limite. No entanto, se o comando finalmente atingir o tempo limite , a duração do tempo limite listada for muito pequena, será necessário listar o tempo limite definido pelo usuário.
Solução imediata
Como solução provisória, você pode fazer o downgrade para o ChromeDriver v79.0.3945.36 , pois parece que os SEVERE logs não aparecem no console, mas você observará o AVISO :
que soa como uma ... solução segura ... e foi confirmada por um membro da equipe do Chromium .
Bloco de código:
Saída do console:
tl; dr
Você pode encontrar algumas discussões relevantes em:
fonte
vstest.console.exe
porque a$?
variável do PowerShell foi$false
embora os testes tenham passado. O PowerShell parece achar que tudo o que está sendo gravado no stderror é uma falha, mesmo que o executor de$LastExitCode
teste tenha retornado zero.Causa raiz: Sempre que você estiver carregando alguma página com a ajuda do driver selenium,
driver
aguarde o script até a página estar completamente carregada. Mas, em algum momento, o webdriver leva mais tempo para carregar a página; nesse caso, você verá umaTimeoutException
exceção no seu console.Solução: quando o carregamento da página demorar muito e você precisar parar de baixar sub-recursos adicionais (imagens, css, js etc.), poderá alterar o pageLoadStrategy por meio do driver da web.
Abaixo do código, basta carregar o conteúdo html da página. Você pode definir a estratégia de carregamento da página no chromeoptions
Solução atualizada -2: Estou de acordo com o DebanjanB, a estratégia PageLoad com None, sem baixar arquivos adicionais (imagens, css, js etc.) não é uma boa ideia durante a execução do teste. Eu pesquisei todos os problemas e tentei encontrar uma solução válida. Tentei as opções abaixo, já que em algum momento ele foi capaz de resolver esse problema.
Nenhum deles ajudou. Mas encontrei uma solução novamente com a estratégia de carregamento de página. Desta vez, estamos baixando todos os sub-recursos, mas aguardamos o evento DOMContentLoaded . Essa estratégia chamou Ansioso . Uma pequena definição de todas as três estratégias de carregamento de página disponíveis
1. normal: Essa estratégia faz com que o Selenium aguarde o carregamento da página inteira (conteúdo html e sub-recursos baixados e analisados).
2. ansioso: Essa estratégia faz com que o Selenium aguarde o evento DOMContentLoaded (somente conteúdo html baixado e analisado).
3. nenhum: essa estratégia faz com que o Selenium retorne imediatamente após o recebimento total do conteúdo da página inicial (download do conteúdo html).
NOTA: Por padrão, quando o Selenium carrega uma página, segue a pageLoadStrategy normal.
Snippet de código sem usar a estratégia Pageload (ou Normal, conforme usado pelo selênio por padrão)
Saída do console:
Com PageLoad Strategy - Eager:
Fragmento de código:
Saída do console:
fonte