Selenium 오류-원격 WebDriver에 대한 HTTP 요청이 60 초 후에 시간 초과되었습니다.


85

저는 몇 달 동안 Selenium을 사용해 왔으며 내부 테스트 프로세스의 일부를 자동화하는 데 사용하고 있습니다. 스크립트가 잘 전달되었습니다. 최근 FF 27.01을 사용하여 C # 2.40.0 웹 드라이버로 업그레이드했으며 이제 스크립트가 다음 오류와 함께 임의의 위치에서 실패합니다.

[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)

한 줄의 코드로 추적 할 수 있었던 최신 오류 :

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

성가신 것은 문제를 해결하려는 시도가 마치 로컬 컴퓨터에서 테스트를 실행하는 것처럼 디버그에서 통과하는 것처럼 어렵다는 것입니다. 또한 테스트를 실행중인 빌드 머신에서 NUNIT 실행기를 통해 실행하면 통과합니다. Teamcity를 사용할 때 자동화 된 빌드 실행 프로세스의 일부로 만 실패하는 것 같습니다. 내가 말했듯이, 이것은 이전에 몇 달 동안 잘 돌아가고 있으며 변경된 유일한 것은 셀레늄 웹 드라이버 키트입니다.

나는 디버그 중에이 문제를 경험했으며, Click()코드 줄이 호출 되었을 때 Firefox가 잠긴 것처럼 보였고 테스트를 중지해야만 Firefox를 계속할 수 있습니다. webdriver 소스 수정을 포함하여 여기에 여러 제안이 있습니까? 다른 사람이 제안을 할 수 있다면 가능한 한 그 길을 가고 싶지 않습니다.


이 설정을 사용하는 여러 독립 프로젝트에서 정확히 동일한 문제가 발생했으며 아직 해결 방법이 없습니다. 가장 좋은 방법은 WebDriver 및 Firefox 어셈블리의 이전 버전으로 다운 그레이드하는 것입니다. 이 동작이 WebDriver 또는 Firefox로 인한 것인지도 알 수 없습니다.
Dio F

답변:


23

Chrome 드라이버 (v2.23)를 사용하거나 TeamCity를 통해 테스트를 실행하면 비슷한 문제가 발생했습니다. Chrome 옵션에 "샌드 박스 없음"플래그를 추가하여 문제를 해결할 수있었습니다.

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

FF 드라이버에 비슷한 옵션이 있는지 잘 모르겠습니다. 내가 이해하는 바에 따르면 문제는 SYSTEM 계정으로 Selenium을 실행하는 TeamCity와 관련이 있습니다.


이것은 내 문제도 해결합니다. 몇 달 동안 시도하지 않은 후 더 이상 크롬 테스트를 실행할 수 없었습니다. Combatc2 감사합니다
Etienne

1
내 코드는 IIS 호스팅 환경에서 제대로 실행되고 갑자기 중지되었지만 여전히 단위 테스트에서 작동했습니다. 이 줄을 추가하면 IIS 환경에서 다시 작동합니다. 감사!
Legends

1
나는 그것을 var options = new ChromeOptions(); options.AddArgument("--no-sandbox");C # 버전 Webdriver 3.14에서 지금 작업 중이라고 생각했습니다 .
moto_geek

20
new FirefoxDriver(new FirefoxBinary(),new FirefoxProfile(),TimeSpan.FromSeconds(180));

위의 코드 줄을 사용하여 브라우저를 시작합니다. 그것은 나를 위해 일했습니다.


우리에게도 수정되었습니다. FF 드라이버 만 만든 기본 스크립트를 실행할 때 60 초 제한 시간이 100 % 작동했습니다. FF를 열기 직전에 데이터베이스 / 읽기 / 쓰기 / 더 많은 작업을 수행하는 리소스가 많은 스크립트를 실행할 때 시간 초과가 50 % 이하인 경우 오류가 발생합니다. 시간 제한을 3 분으로 늘리면 문제가 해결되었습니다. Webdriver는 엔진을 예열하는 데 약간의 시간이 필요합니다.
KayakinKoder

13

나는 몇 달 전에 (또한 click()명령에서) 이 문제를 처음 접했으며 그 이후로 나에게 문제가되었습니다. .NET Selenium 바인딩에 문제가있는 것 같습니다. IE 드라이버에서 일하는 사람이 작성한이 블로그 게시물은 무슨 일이 일어나고 있는지 설명하는 데 도움이됩니다.

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

불행히도이 문제에 대한 실질적인 해결책은없는 것 같습니다. 이 문제가 Selenium 개발자에게 제기 될 때마다 ( 여기 참조 ) 일반적인 응답입니다 .

재현 가능한 시나리오가 필요합니다. 여기에는 샘플 페이지 또는 문제를 재현 할 수있는 공개 사이트 페이지에 대한 링크가 포함되어야합니다.

일관되게 재현 가능한 테스트 케이스를 제출할 수 있다면이 버그를 영구적으로 중단하는 데 매우 도움이 될 수 있습니다.

즉, 그 동안이 해결 방법을 시도해 볼 수 있습니다. 시도하려는 HTML 버튼에 Javascript가 포함 click()onclick속성이있는 경우 명령을 호출하는 대신 JavascriptExecutor 를 사용하여 해당 코드를 직접 실행하는 것이 좋습니다 click(). 나는 실행하는 것을 발견했다onclickJavascript 하면 일부 테스트를 통과 할 수 .


9

Firefox와 동일한 문제가있었습니다. 옵션을 사용하여 Chrome으로 전환했으며 그 이후로 모든 것이 괜찮 았습니다.

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

나는 여기서 착각 할 가능성이 있지만 마지막 줄은 효과가 없을 것 같습니다. PageLoad는 TimeSpan 자체이고 .Add on TimeSpan은 순수한 함수로 PageLoad를 수정하지 않고 단순히 폐기되는 새 TimeSpan을 반환합니다.
Jason Ritchie

3

제 경우에는 버튼의 유형이 submit아니고 모든 작업이 잘 되도록 button변경합니다 . 아래와 같이ClickSumbit

...에서 driver.FindElement(By.Id("btnLogin")).Click();

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

BTW, 나는이 게시물의 모든 대답을 시도했지만 나를 위해 일하지 않았습니다.


3

비슷한 문제가 있습니다. 드라이버의 생성자에 더 많은 시간을 설정하십시오-예를 추가하십시오.

var timespan = TimeSpan.FromMinutes(3);

var driver = new FirefoxDriver(binary, profile, timeSpan);

안녕하세요 bewu, 다음과 같은 형식일까요? driver.Manage (). Timeouts (). ImplicitlyWait (TimeSpan.FromSeconds (5));
나단

4
아니요,이 기다림이 아닙니다. ImplicitlyWait은 요소 찾기와 연결되어 있습니다. 요청이 진행될 때까지 기다릴 때 기본 (60 초) 드라이버 시간 제한을 변경해야합니다 (내가 틀리지 않은 경우). 어쨌든 FF 드라이버의 생성자를 설정하고 거기에 더 많은 속성을 추가하거나 시간 제한을 변경하는 줄을 찾아야합니다. 뭔가 같은 :driver = new FirefoxDriver(new FirefoxBinary(), new FirefoxProfile(path to your profile), TimeSpan.FromMinutes(3));
바트 Wojtala

2
ChromeDriver의 경우driver = new ChromeDriver(service, chromeDriverOptions, TimeSpan.FromMinutes(3));
redwards510

2

이 문제는 웹 드라이버 개체에 액세스하려고 할 때 발생한다고 생각합니다.

1) 창이 닫히고 아직 부모로 전환하지 않았습니다.

2) 아직 준비되지 않았고 전환 이후 업데이트 된 창으로 전환했습니다.

windowhandles.count당신이 기대 하는 것이 될 때까지 기다리는 것은 페이지 내용을 고려하지 않으며 document.ready도 고려하지 않습니다. 이 문제에 대한 해결책을 찾고 있습니다.


2

제 경우에는 크롬 업데이트 폴더를 삭제했기 때문입니다. 크롬 재설치 후 정상적으로 작동합니다.


1

문제는 Click()빌드 환경에서 시간 초과 평가가 발생한다는 것입니다 Click().

또한 Click()네트워크 속도 등에 따라 평가가 더 오래 걸리기 때문에 재 시도를 추가하십시오.


안녕하세요, 브라우저가 잠기기 때문에 재시도 옵션이 작동하지 않습니다. 테스트를 중지해야만 브라우저를 계속할 수 있습니다.
Nathan

1

제 경우에는 팀 빌드 서버에서이 오류가 발생하는 것을 발견했습니다. 테스트는 로컬 개발 머신에서 작동했습니다.

문제는 대상 웹 사이트가 빌드 서버에서 올바르게 구성되지 않아 브라우저를 올바르게 열 수 없다는 것입니다.

우리는 크롬 드라이버를 사용하고 있었지만 그것이 차이를 만드는지 잘 모르겠습니다.


1

제 경우에는 문제가 SendKeys () 및 Remote Desktop 입니다. 지금까지 해결 방법 게시 :

vSphere에서 호스팅되고 RDP를 통해 관리되는 노드에서 Jenkins 작업의 일부로 실행될 때 실패하는 Selenium 테스트가있었습니다. 몇 가지 문제 해결 후 원격 데스크톱이 연결되고 집중되면 성공하지만 원격 데스크톱이 연결 해제되거나 최소화 된 경우 예외로 실패합니다.

해결 방법으로 RDP 대신 vSphere Console을 통해 로그인 한 다음 vSphere를 닫은 후에도 테스트가 더 이상 실패하지 않았습니다. 이것은 해결 방법이지만 RDP를 통해 로그인하지 않고 항상 vSphere Console을 통해서만 관리하도록주의해야합니다.


0

Selenium.WebDriver.ChromeDriver를 2.40.0에서 2.27.0으로 변경하는 것은 괜찮습니다.


0

new FirefoxDriver(binary, profile, timeSpan)쓸모있다.

이제 new FirefoxDriver(FirefoxDriverService.CreateDefaultService(), FirefoxOptions options, TimeSpan commandTimeout)대신 사용할 수 있습니다 .

도 있고 new FirefoxDriver(string geckoDriverDirectory, FirefoxOptions options, TimeSpan commandTimeout)작동합니다. 그러나 문서화되지 않았으며 geckoDriverDirectory이미 .NET에있는 경우에도 수동으로 지정해야합니다 Path.


0

우리는 같은 문제가있었습니다. 우리의 경우 브라우저는 로그인 팝업 (Windows 인증)에 의해 차단되었으므로 60 초 후에 반환되지 않습니다. Chrome이 실행중인 Windows 계정에 올바른 액세스 권한을 추가하면 문제가 해결되었습니다.


0

으악! 오늘 macOS 에서이 문제 에 직면 했고 문제는 새 Appium 설치를 제안하는 팝업 창만큼 간단했습니다. 버전 원격 CI 빌드 서버에 표시되었습니다.

VNC로 연결하고 " 나중에 설치 "를 클릭하면 문제가 해결되었습니다.


0

제 경우에는 위의 답변 중 어느 것도 내 문제를 완전히 해결하지 못했습니다. 결국 ( no-sandbox) 모드, 연장 된 시간 제한 기간 ( driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), capability, TimeSpan.FromMinutes(3));) 및 페이지로드 시간 제한 ( driver.Manage().Timeouts().PageLoad.Add(System.TimeSpan.FromSeconds(30));)을 사용한 연결을 사용하게되었으므로 이제 코드는 다음과 같습니다.

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

그러나 위의 방법 중 어느 것도 내 문제를 해결하지 못했다고 언급했듯이 계속해서 오류가 발생했으며 여러 chromedriver.exe 및 chrome.exe 프로세스가 활성화되었습니다 (크롬 드라이버 ~ 10 개 및 크롬 ~ 50 개).

그래서 어딘가에서 드라이버를 폐기 한 후 다음 테스트를 시작하기 전에 몇 초 동안 기다려야한다고 읽었으므로 다음 줄을 추가하여 dispose 메서드를 사용했습니다.

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

이 수면 수정으로 더 이상 시간 초과 오류가 발생하지 않으며 불필요하게 열린 chromedriver.exe 및 chrome.exe 프로세스가 없습니다.

이 문제로 어려움을 겪는 사람을 내가 한만큼 오랫동안 도왔기를 바랍니다.


0

Windows 서버 (무인)에서 예약 된 작업으로 헤드리스 ChromeDriver를 실행하려고 할 때 동일한 예외가 발생했습니다. 나를 위해 그것을 해결 한 것은 사용자 " 관리자 " 로 작업실행하는 것입니다 (마지막에 S에 주목). 또한 내가 한 작업 (관련성이 있는지 모르겠 음)은 작업 "조건"탭에서 "모든 연결"을 선택했습니다.


-1

ChromDriver의 경우 아래가 저에게 효과적이었습니다.

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

Selenium 버전 3.11, ChromeDriver 2.37

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.