2014-01-08 2 views
0

셀렌 WebDriverWait 객체를 사용하여 코드에서 객체 감지 시간 초과를 동적으로 제어하고 있습니다. 그러나이 객체는 WebDriverWait 객체에 지정된 시간이 소비되기 전에 시간 초과됩니다. 예를 들어. 10 초 타임 아웃 시간 범위로 초기화 된 개체가 있지만 개체가 약 2 초 내에 시간 초과됩니다. 여기 WebDriverWait가 객체 초기화시 지정된 시간 범위 전에 예외를 던지고 있습니다.

내 코드

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); 
try 
{ 
    wait.Until(drv => (drv.FindElement(By.XPath(".//*[@class='TopTitle']")))); //drv.FindElement(By.XPath(".//*[@class='TopTitle']")) throws exception 
} 
catch 
{ 
    //exception handlers 
} 

내가 디버그 모드에서 실행하고 내가 분명히 drv.FindElement(By.XPath(".//*[@class='TopTitle']")) 2 ~ 3 초 이내에

예외 및 스택 추적 볼 수 있습니다

수 없습니다로를 요소 찾기 : { "method": "xpath", "selector": ".//*[class = 'TopTitle']"}
at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError (응답 e rrorResponse) OpenQA.Selenium.Remote.RemoteWebDriver.Execute (문자열 driverCommandToExecute에서
사전 파라메터) OpenQA.Selenium.Remote.RemoteWebDriver.FindElement에서
(문자열기구 문자열 값)
OpenQA.Selenium.Remote.RemoteWebDriver에서 .FindElementByXPath (String xpath)
at OpenQA.Selenium.By. <> C_ DisplayClasse.b _c OpenQA.Selenium.By.FindElement (ISearchContext 컨텍스트)에 OpenQA.Selenium.Remote.RemoteWebDriver.FindElement
에서
(기준에 의한) (ISearchContext 컨텍스트)에 VS_UnitTest.Navigation
. <> C_ DisplayClass2.b _0 (IWebDriver의 DRV)의 C : \ 힘내 \ WebadminTests \ WebAdminTests Navigation.cs \ : 라인 511 OpenQA.Selenium.Support.UI.DefaultWait.Until [TResult (Func을 조건)에서

+0

로컬로 실행하면 관계없이 예외를 보게됩니다. Visual Studio는 기본적으로 대부분의 예외를 catch하고 표시하도록 설정되어 있습니다. – Arran

+0

오늘까지는 예외가 발생하지 않았습니다. 그리고 나는 아직도 몇 달 동안 테스트했던 동일한 UI를 테스트 중입니다. 이제 요소가 명확하게 존재하는 홈 페이지에서도 예외가 발생합니다. 그러나 drv.FindElement (By.XPath (".//////class ="TopTitle '] "))) throws 요소 예외를 찾을 수 없습니다. –

+0

그러면 WebDriverWait과 전혀 관련이없는 완전히 다른 문제가 발생합니다. 무엇이 바뀌 었습니까? 어떤 브라우저입니까? Selenium의 어떤 버전입니까? 최근에 업그레이드하셨습니까? 그렇지 않다면, 뒷받침 라이브러리가 변경되지 않은 경우 * 셀레늄이 잘못되었다는 것을 확신 할 수 있습니다. ** 전체 오류 및 스택 추적 **을 표시하십시오. – Arran

답변

0

WebDriverWait은 특정 종류의 예외 만 처리합니다. FluentWait.ignoring 기능 (WebDriverWait은 FluentWait의 확장입니다)을 사용하여 다른 종류의 항목을 직접 처리해야합니다. 소스 코드를 보면 WebDriverWait은 자체적으로 NotFoundException.class 만 무시합니다. other exceptions을 무시하려면 catch 클래스 (또는 generic catch 절)를 추가해야합니다. 참고 : TimeoutException의 경우 ... ignoring 절에서 사용하지 말고 대신 try-catch에서 WebDriverWait을 래핑하고 Wait 외부에서 TimeoutException을 catch하십시오.

+0

요소를 찾을 수 없습니다. { "method": "xpath", "selector": ".//*[class = 'TopTitle']"} wait.endil 행 에 예외가 발생하고 10 후에 시간이 초과되었습니다. catch 줄의 초 예외 이 코드는 지금까지 작동했습니다. 오늘은이 예외를 던지기 시작했습니다 –

+0

저는 C# 구문이 더 좋았습니다. 나는 자바 개발자이기 때문에 당신이 잘못하고있는 것을 볼 수 없다. 그러나 추측한다면 WebDriverWait을 10 초로 설정했지만 .findElement 호출의 기본 제한 시간은 30 초가 더 길다는 것이 문제라고 생각합니다. – djangofan

+0

대기 시간 제한을 35 초로 늘리겠습니다. –

관련 문제