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.
Respostas:
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.
fonte
var options = new ChromeOptions(); options.AddArgument("--no-sandbox");
Working now in C # version Webdriver 3.14.new FirefoxDriver(new FirefoxBinary(),new FirefoxProfile(),TimeSpan.FromSeconds(180));
Inicie seu navegador usando as linhas de código acima. Funcionou para mim
fonte
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 :
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 umonclick
atributo que contém Javascript, considere usar um JavascriptExecutor para executar esse código diretamente, em vez de chamar oclick()
comando. Descobri que executar oonclick
Javascript diretamente permite que alguns dos meus testes passem.fonte
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));
fonte
No meu caso, o tipo do meu botão
submit
não ébutton
e eu mudo oClick
paraSumbit
entã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.
fonte
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);
fonte
driver = new FirefoxDriver(new FirefoxBinary(), new FirefoxProfile(path to your profile), TimeSpan.FromMinutes(3));
driver = new ChromeDriver(service, chromeDriverOptions, TimeSpan.FromMinutes(3));
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.count
que 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 problemafonte
No meu caso, é porque excluí a pasta de atualização do Chrome. Após a reinstalação do Chrome, ele está funcionando bem.
fonte
O problema é que a avaliação do
Click()
tempo limite em seu ambiente de construção pode ser útil para o que aconteceClick()
.Além disso, tente adicionar Retrys para o
Click()
porque ocasionalmente as avaliações demoram mais tempo dependendo das velocidades da rede, etc.fonte
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.
fonte
No meu caso, o problema era com SendKeys () e Remote Desktop . Postando a solução alternativa que tenho até agora:
fonte
alterar o Selenium.WebDriver.ChromeDriver de 2.40.0 para 2.27.0 está certo para mim
fonte
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á-geckoDriverDirectory
lo manualmente , embora já esteja emPath
.fonte
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.
fonte
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.
fonte
No meu caso, nenhuma das respostas acima resolveu meu problema completamente. Acabei usando o
no-sandbox
modo ( ), 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.
fonte
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.
fonte
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
fonte