Tempo limite de recebimento da mensagem do renderizador: 0.100 mensagens de log usando o ChromeDriver e o Chrome v80 através do Selenium Java

39

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?

DebanjanB
fonte
7
Também estou enfrentando o mesmo problema :(
Sooraj
6
Estou recebendo o mesmo problema quando atualizamos para a v80. Porém, sua pergunta provavelmente deve perguntar como corrigi-la, em vez de perguntar se mais alguém está enfrentando o mesmo problema.
Taplar
2
Não acredito que esta questão foi encerrada. Muitas vezes, o SO falha como mecanismo de ajuda.
Saeed Neamati
4
Enfrentando exatamente o mesmo problema. Todo o nosso código automatizado de selênio está quebrado. E não podemos fazer o downgrade por causa de muitas complexidades.
Saeed Neamati
2
@DebanjanB Sim, eu passei pela sua postagem. Espero que eles possam corrigi-lo no próximo lançamento. Tentei descobrir a solução, por isso mencionei, mas há mais opções para evitar o tempo limite. Vou tentar com outra opção, mas se a duração do tempo limite for muito menor, acho que precisamos aguardar o próximo lançamento.
Muzzamil 10/02

Respostas:

24

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:

      System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
      WebDriver driver =  new ChromeDriver();
      driver.quit();
      
    • Saída do console:

      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
      
  • Se você estiver usando o Chrome v81 , o ChromeDriver 81.0.4044.20 lançado recentemente resolve o problema.

  • Se você estiver usando o Chrome no canal Dev ou Canary , precisará coletar os binários específicos da plataforma:

Solução permanente

No entanto, @bugdroidsubmeteu a correção real por meio desta revisão / confirmação , da seguinte maneira:

[ChromeDriver] suprime o registro do tempo limite do loop de repetição : r1924789 adicionou um loop de repetição enquanto aguarda as mensagens do DevTools. Isso enviava spam aos logs dos usuários com relatórios de tempo limite não informativos. Este CL suprime essas mensagens de log e relata corretamente o valor do tempo limite do comando, quando apropriado.

Nota :

  • Status: Fixed
  • Marcadores: ToBeReleased ChromeDriver-82

História

Esta mensagem de erro ...

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

... 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::HandleEventsUntilpara permitir uma verificação adicional do status da navegação. Infelizmente, quando esse tempo limite expirou, ele é registrado como SEVERE (por ProcessNextMessage). No caso desse pequeno tempo limite, ele não deve registrar como SEVERO , embora o tempo limite SendCommandInternalainda 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 :

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

que soa como uma ... solução segura ... e foi confirmada por um membro da equipe do Chromium .

chromedriver79

  • Bloco de código:

    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();
        }
    }
    
  • Saída do console:

    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

Você pode encontrar algumas discussões relevantes em:

DebanjanB
fonte
11
Lembre-se também de que essa mensagem de log parece estar gravada no stderror. Eu tive um script do PowerShell que começou a falhar após a execução de testes, vstest.console.exeporque a $?variável do PowerShell foi $falseembora os testes tenham passado. O PowerShell parece achar que tudo o que está sendo gravado no stderror é uma falha, mesmo que o executor de $LastExitCodeteste tenha retornado zero.
Greg Burghardt
4
Re: Chrome v80, usando o recentemente lançado ChromeDriver 80.0.3987.106 resolve o problema. Re: Chrome v81, usando o ChromeDriver 81.0.4044.20 lançado recentemente, resolve o problema. Ainda estou vendo o problema com as atualizações do ChromeDirver.
Neil
11
O ChromeDriver v79 win32 está funcionando bem com o chrome v80.0.3987.132 e não está fornecendo erro TimedOut no console. Mas, às vezes, o Chromedriver falha ao iniciar o servidor.
Surodip 6/03
11
O uso da solução alternativa do chromedriver v79 não está mais funcionando com a versão mais recente do chrome estável (81.0.4044.92), com o driver incapaz de abrir o chrome. Atualizei o chromedriver para o mais recente e ele funciona, mas os graves erros de tempo limite retornaram.
PST
@PST - exatamente os mesmos problemas. isso é frustrante.
Sriram Ilango
10

Causa raiz: Sempre que você estiver carregando alguma página com a ajuda do driver selenium, driveraguarde 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á uma TimeoutExceptionexceçã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

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

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.

    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");

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)

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();

Saída do console:

Iniciando o ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / branch-heads / 3987 @ {# 185}) na porta 41540 Somente conexões locais são permitidas. Proteja as portas usadas pelo ChromeDriver e estruturas de teste relacionadas para impedir o acesso por código malicioso. 11 de fevereiro de 2020 10:22:12 AM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Dialeto detectado: W3C [1581412933.937] [SEVERE]: excedeu o tempo limite ao receber mensagem do representante: 0.100 [1581412934.066] [SEVERE]: excedeu o tempo limite recebendo mensagem do representante: 0.100 [1581412934.168] [SEVERE]: excedeu o tempo limite recebendo mensagem do representante: 0.100 [1581412934.360] [SEVERE]: expirou o recebimento da mensagem do representante: 0.100 [1581412934.461] [SEVERE]: expirou o recebimento da mensagem do representante: 0.100 [1581412934.618] [GRAVE]:

Com PageLoad Strategy - Eager:

Fragmento de código:

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();

Saída do console:

Iniciando o ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / branch-heads / 3987 @ {# 185}) na porta 1175 Somente conexões locais são permitidas. Proteja as portas usadas pelo ChromeDriver e estruturas de teste relacionadas para impedir o acesso por código malicioso. 11 de fevereiro de 2020 10:29:05 org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Dialeto detectado: W3C
21

Muzzamil
fonte
Geralmente, você não poderá ajustar a estratégia PageLoad, pois as configurações do WebDriver são padronizadas e se ajustam melhor à estratégia de teste necessária. No entanto, nas discussões Como fazer com que o Selenium não espere até o carregamento da página inteira , não espere o carregamento de uma página , discutimos isso em detalhes. É um problema com o ChromeDriver v80.
DebanjanB
2
@DebanjanB Estou de acordo com você, mas como você sabe, a comunidade está prestes a resolver problemas. Tentei a melhor solução possível disponível. Se você sabe que é PROBLEMA ou BUG no driver chrome, precisamos registrar esse problema no projeto Git ou no local recomendado. Levantar perguntas no SO não ajudará.
Muzzamil 11/02
Atualizei recentemente meu chrome e chromedriver e comecei a receber todas essas mensagens de aviso. Agora estou tentando fazer o downgrade do meu chrome e não consigo encontrar onde obter o chrome 79v. Alguém pode me fornecer o link para baixar chrome 79v
Vin
@ Vin aqui você pode baixar chromedriver.chromium.org/downloads
Muzzamil 14/04