Erro Selenium - A solicitação HTTP para o WebDriver remoto expirou após 60 segundos

85

Estou usando o Selenium há alguns meses, que estamos usando para automatizar alguns de nossos processos de teste internos. Os scripts estão passando bem. Recentemente, atualizei para o webdriver C # 2.40.0 usando FF 27.01 e nossos scripts agora estão falhando em locais aleatórios com o seguinte erro.

[Portal.SmokeTest.SmokeRunTest.Booking] TearDown method failed. OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/element timed out after 60 seconds.
  ----> System.Net.WebException : The operation has timed out
TearDown : OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/window timed out after 60 seconds.
  ----> System.Net.WebException : The operation has timed out
[09:01:20]
[Portal.SmokeTest.SmokeRunTest.Booking] TearDown method failed. OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/element timed out after 60 seconds.
  ----> System.Net.WebException : The operation has timed out
TearDown : OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/window timed out after 60 seconds.
  ----> System.Net.WebException : The operation has timed out
   at OpenQA.Selenium.Support.UI.DefaultWait`1.PropagateExceptionIfNotIgnored(Exception e)
   at OpenQA.Selenium.Support.UI.DefaultWait`1.Until[TResult](Func`2 condition)
   at Portal.Test.Helpers.Process_Bookings.OpenBookings.SelectBooking(String bookingnumber)
   at Portal.SmokeTest.SmokeRunTest.Booking() in d:\TeamCityAgent\work\dac1dcea7f2e80df\SmokeTests\SmokeRunTest.cs:line 68
--WebException
   at System.Net.HttpWebRequest.GetResponse()
   at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)
--TearDown
   at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)
   at OpenQA.Selenium.Remote.HttpCommandExecutor.Execute(Command commandToExecute)
   at OpenQA.Selenium.Firefox.Internal.ExtensionConnection.Execute(Command commandToExecute)
   at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
   at OpenQA.Selenium.Remote.RemoteWebDriver.Close()
   at Portal.Test.Helpers.Setup.CloseWebdriver()
   at Portal.SmokeTest.SmokeRunTest.TearDown() in d:\TeamCityAgent\work\dac1dcea7f2e80df\SmokeTests\SmokeRunTest.cs:line 162
--WebException
   at System.Net.HttpWebRequest.GetResponse()
   at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)

O erro mais recente que consegui rastrear em uma única linha de código:

_setup.driver.FindElement(By.XPath("//button[@class='buttonSmall lockBookingButton']")).Click();

O chato é que tentar consertar o problema está ficando difícil, como se eu rodasse o teste na minha máquina local, no debug ele passa. Além disso, se eu executá-lo por meio do NUNIT runner na máquina de construção em que estou executando o teste, ele também passa. Ele só parece falhar como parte de nosso processo de execução de build automatizado ao usar o Teamcity. Como eu disse, isso está funcionando bem há meses, e a única coisa que mudou foi o kit de driver da web de selênio.

Eu já experimentei esse problema antes, durante a depuração, e quando uma Click()linha de código foi chamada, o Firefox parecia travar e apenas interromper o teste permitiria que o Firefox continuasse. Há uma série de sugestões aqui, incluindo a modificação da fonte do webdriver. Eu gostaria de não seguir esse caminho, se possível, se alguém mais puder oferecer alguma sugestão.

Nathan
fonte
Tivemos exatamente o mesmo problema em vários projetos independentes usando essa configuração e ainda não temos uma solução alternativa para isso. Nossa melhor aposta era fazer o downgrade para versões mais antigas dos assemblies WebDriver e Firefox. Também não sabemos se esse comportamento é causado pelo WebDriver ou Firefox.
Dio F

Respostas:

23

Eu tive um problema semelhante ao usar o driver do Chrome (v2.23) / executando os testes através do TeamCity. Consegui corrigir o problema adicionando a sinalização "no-sandbox" às opções do Chrome:

var options = new ChromeOptions();
options.AddArgument("no-sandbox");

Não tenho certeza se existe uma opção semelhante para o driver FF. Pelo que entendi, o problema tem algo a ver com o TeamCity executando o Selenium na conta SYSTEM.

combatc2
fonte
isso resolve meu problema também. Não consegui mais executar testes de cromo depois de meses sem testá-los. Obrigado combatc2
Etienne
1
Meu código estava funcionando bem em um env hospedado no IIS e parou repentinamente, mas ainda funcionava em meus testes de unidade. Adicionar esta linha fez com que funcionasse novamente no ambiente IIS. Obrigado!
Legends
1
Eu delcarei como var options = new ChromeOptions(); options.AddArgument("--no-sandbox");Working now in C # version Webdriver 3.14.
moto_geek
20
new FirefoxDriver(new FirefoxBinary(),new FirefoxProfile(),TimeSpan.FromSeconds(180));

Inicie seu navegador usando as linhas de código acima. Funcionou para mim

user2298124
fonte
Corrigido para nós também. Ao executar um script básico que acabou de criar um driver FF e nada mais, um timeout de 60 segundos funcionou 100% do tempo. Ao executar nosso script com muitos recursos, que abre conexões para bancos de dados / lê / grava / faz muito mais imediatamente antes de abrir o FF, um tempo limite de 60 pode causar falhas em cerca de 50% do tempo. Aumentar o tempo limite para 3 minutos corrigiu o problema. Parece que o Webdriver só precisa de um pouco mais de tempo para aquecer o motor.
KayakinKoder
13

Eu encontrei esse problema pela primeira vez há meses (também no click()comando) e tem sido um problema para mim desde então. Parece haver algum tipo de problema com as ligações do .NET Selenium. Esta postagem do blog do cara que trabalha no driver do IE é útil para explicar o que está acontecendo:

http://jimevansmusic.blogspot.com/2012/11/net-bindings-whaddaymean-no-response.html

Infelizmente, não parece haver uma solução real para esse problema. Sempre que esse problema é levantado para os desenvolvedores do Selenium ( veja aqui ), esta é uma resposta típica :

Precisamos de um cenário reproduzível, que deve incluir uma página de amostra ou um link para a página de um site público onde o problema pode ser reproduzido.

Se você puder enviar um caso de teste reproduzível de forma consistente, isso pode ser muito útil para colocar esse bug de lado para sempre.

Dito isso, talvez você possa tentar esta solução alternativa enquanto isso. Se o botão HTML que você está tentando acessar click()possui um onclickatributo que contém Javascript, considere usar um JavascriptExecutor para executar esse código diretamente, em vez de chamar o click()comando. Descobri que executar o onclickJavascript diretamente permite que alguns dos meus testes passem.

Daniel Charles
fonte
9

Tive o mesmo problema com o Firefox. Mudei para o Chrome com opções e está tudo bem desde então.

ChromeOptions options = new ChromeOptions();
 options.AddArgument("no-sandbox");

 ChromeDriver driver = new ChromeDriver(ChromeDriverService.CreateDefaultService(), options, TimeSpan.FromMinutes(3));
 driver.Manage().Timeouts().PageLoad.Add(System.TimeSpan.FromSeconds(30));
Lawal
fonte
Provavelmente estou enganado aqui, mas parece que a última linha não terá efeito. PageLoad é o próprio TimeSpan, e .Add on TimeSpan é uma função pura, que não modifica o PageLoad, ele simplesmente retorna um novo TimeSpan que está sendo descartado.
Jason Ritchie,
3

No meu caso, o tipo do meu botão submitnão é buttone eu mudo o Clickpara Sumbitentão todo trabalho bom. Algo como abaixo,

de driver.FindElement(By.Id("btnLogin")).Click();

para driver.FindElement(By.Id("btnLogin")).Submit();

BTW, eu tentei todas as respostas neste post, mas não funciona para mim.

MichaelMao
fonte
3

Tenho um problema semelhante. Tente definir mais tempo no construtor do driver - adicione, por exemplo.

var timespan = TimeSpan.FromMinutes(3);

var driver = new FirefoxDriver(binary, profile, timeSpan);
Bart Wojtala
fonte
Olá, bewu, seria no formato abaixo? driver.Manage (). Timeouts (). ImplicitlyWait (TimeSpan.FromSeconds (5));
Nathan
4
Não, essa espera, ImplicitlyWait, está relacionada à localização de elementos. Você precisa alterar o tempo limite do driver padrão (60 segundos), quando ele aguarda a solicitação para prosseguir (se não estiver errado). De qualquer forma, você deve encontrar uma linha onde definir o construtor do driver FF e adicionar mais atributos ou alterar o tempo limite. Algo como:driver = new FirefoxDriver(new FirefoxBinary(), new FirefoxProfile(path to your profile), TimeSpan.FromMinutes(3));
Bart Wojtala
2
para ChromeDriver seria semelhante adriver = new ChromeDriver(service, chromeDriverOptions, TimeSpan.FromMinutes(3));
redwards510
2

Acho que esse problema ocorre quando você tenta acessar o objeto do driver da web após

1) uma janela foi fechada e você ainda não mudou para o pai

2) você mudou para uma janela que não estava totalmente pronta e foi atualizada desde a mudança

esperar windowhandles.countque seja o que você espera não leva em consideração o conteúdo da página nem document.ready. Ainda estou procurando uma solução para este problema

ribbo
fonte
2

No meu caso, é porque excluí a pasta de atualização do Chrome. Após a reinstalação do Chrome, ele está funcionando bem.

gary.zhang
fonte
1

O problema é que a avaliação do Click()tempo limite em seu ambiente de construção pode ser útil para o que acontece Click().

Além disso, tente adicionar Retrys para o Click()porque ocasionalmente as avaliações demoram mais tempo dependendo das velocidades da rede, etc.

mordeu
fonte
Olá, A opção de nova tentativa não funciona porque o navegador simplesmente trava. Apenas interromper o teste permite que o navegador continue.
Nathan
1

No meu caso achei esse erro acontecendo no servidor de build de nossas equipes. Os testes funcionaram em nossas máquinas de desenvolvimento locais.

O problema era que o site de destino não estava configurado corretamente no servidor de compilação, portanto, não era possível abrir o navegador corretamente.

Estávamos usando o driver do Chrome, mas não tenho certeza se isso faz diferença.

Sean Tomlins
fonte
1

No meu caso, o problema era com SendKeys () e Remote Desktop . Postando a solução alternativa que tenho até agora:

Tive um teste Selenium que falhava quando executado como parte de um trabalho do Jenkins em um nó hospedado no vSphere e administrado por RDP. Após algumas soluções de problemas, descobriu-se que é bem-sucedido se a Área de Trabalho Remota estiver conectada e focada, mas falha, exceto se a Área de Trabalho Remota for desconectada ou mesmo minimizada.

Como solução alternativa, loguei por meio do vSphere Console em vez do RDP e, mesmo depois de fechar o vSphere, o teste não falhou mais. Esta é uma solução alternativa, mas eu teria que ter cuidado para nunca fazer login por RDP e sempre administrar apenas por meio do console vSphere.

sashoalm
fonte
0

alterar o Selenium.WebDriver.ChromeDriver de 2.40.0 para 2.27.0 está certo para mim

john liao
fonte
0

O new FirefoxDriver(binary, profile, timeSpan)tornou-se obsoleto.

Agora você pode usar new FirefoxDriver(FirefoxDriverService.CreateDefaultService(), FirefoxOptions options, TimeSpan commandTimeout).

Há também um new FirefoxDriver(string geckoDriverDirectory, FirefoxOptions options, TimeSpan commandTimeout)e funciona. Mas ele não está documentado e você precisa especificá- geckoDriverDirectorylo manualmente , embora já esteja em Path.

imba-tjd
fonte
0

Nós tivemos o mesmo problema. No nosso caso, o navegador foi bloqueado por um popup de login (autenticação do Windows), não retornando após 60 segundos. Adicionar direitos de acesso corretos à conta do Windows em que o Chrome estava sendo executado resolveu o problema.

Rogier van het Schip
fonte
0

Arrrgh! Enfrentei isso no macOS hoje e o problema era tão simples quanto - a janela pop-up sugerindo instalar a nova versão do Appium estava sendo exibida no servidor de compilação CI remoto.

Apenas VNC'ing para ele e clicar em " Instalar mais tarde " consertou.

RAM237
fonte
0

No meu caso, nenhuma das respostas acima resolveu meu problema completamente. Acabei usando o no-sandboxmodo ( ), a conexão com período de tempo limite estendido ( driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), capability, TimeSpan.FromMinutes(3));) e o tempo limite de carregamento da página ( driver.Manage().Timeouts().PageLoad.Add(System.TimeSpan.FromSeconds(30));), então agora meu código se parece com este:

    public IWebDriver GetRemoteChromeDriver(string downloadPath)
    {
        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.AddArguments(
            "start-maximized",
            "enable-automation",
            "--headless",
            "--no-sandbox", //this is the relevant other arguments came from solving other issues
            "--disable-infobars",
            "--disable-dev-shm-usage",
            "--disable-browser-side-navigation",
            "--disable-gpu",
            "--ignore-certificate-errors");
        capability = chromeOptions.ToCapabilities();

        SetRemoteWebDriver();
        SetImplicitlyWait();
        Thread.Sleep(TimeSpan.FromSeconds(2));
        return driver;
    }
    
    private void SetImplicitlyWait()
    {
        driver.Manage().Timeouts().PageLoad.Add(TimeSpan.FromSeconds(30));
    }


    private void SetRemoteWebDriver()
    {
        driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), capability, TimeSpan.FromMinutes(3));
    }

Mas, como mencionei, nenhum dos métodos acima resolveu meu problema, recebia continuamente o erro e vários processos chromedriver.exe e chrome.exe estavam ativos (~ 10 do chromedriver e ~ 50 do chrome).

Então, em algum lugar, li que depois de descartar o driver, devo esperar alguns segundos antes de iniciar o próximo teste, então adicionei a seguinte linha para descartar o método:

    driver?.Quit();
    driver?.Dispose();
    Thread.Sleep(3000);

Com essa modificação de sono, não recebo mais o erro de tempo limite e não há processos chromedriver.exe e chrome.exe abertos desnecessariamente.

Espero ter ajudado alguém que luta com esse problema por tanto tempo quanto eu.

Turanszkik
fonte
0

Tive a mesma exceção ao tentar executar um ChromeDriver sem cabeça com uma tarefa agendada em um servidor Windows (autônomo). O que resolveu para mim foi executar a tarefa como o usuário " Administradores " (observe o S no final). O que eu também fiz (não sei se é relevante) foi selecionar "Qualquer Conexão" na guia "Condições" da tarefa.

SubqueryCrunch
fonte
-1

Para o ChromeDriver, o seguinte funcionou para mim:

string chromeDriverDirectory = "C:\\temp\\2.37";
 var options = new ChromeOptions();
 options.AddArgument("-no-sandbox");
 driver = new ChromeDriver(chromeDriverDirectory, options, 
 TimeSpan.FromMinutes(2));

Selenium versão 3.11, ChromeDriver 2.37

R2D2
fonte