0

XP 및 Win7 32/64bit 시스템에서 장기간 매우 잘 작동하는 Selenium 테스트 세트 (약 180 개)가 있습니다.Windows가 업데이트 된 후 Selenium에 화면이 표시되지 않음 - Windows 업데이트 후 도입 됨

최근에 Windows 7 업데이트 (우연 일 수도 있음) 이후에는 테스트가 신뢰할 수 없게되었습니다. 무작위로 실패하지만 항상 같은 문제가 있습니다. 예상되는 화면이 표시되지만 WaitForPageToLoad() 메서드는이를 확인하지 않습니다. 이것은 XP 시스템에서는 발생하지 않으며 최근에 업데이트 된 Win7 시스템에서만 발생합니다.

플랫폼 : Win7, 32 및 64 비트, 셀레늄 1.0 및 2.33.0 (동작에는 차이가 없음), VS2008, 브라우저 IE9.

시나리오 : 테스트는 초기에 단일 버튼으로 '다시 시작'화면을 표시하고 로그인 화면을 시작해야하는 버튼을 클릭합니다 (모든 테스트는 동일한 코드를 통과합니다). 브라우저에 로그인 화면이 표시되지만 테스트 라인은 오류 메시지와 함께 시간이 초과 될 수 있도록 반환되지 않으며 테스트 라인은 브라우저에 표시되지만 테스트 라인은

selenium.WaitForScreenToDisplay(30000); 
입니다. 이 방법으로 테스트가 무작위로 완전히 실패합니다. 절반 정도는 실패하지만 일관되게는 실패하지는 않습니다.

인간이 브라우저와 상호 작용할 때 응용 프로그램 자체가 완벽하게 동작합니다. 셀레늄 로그는 단서의 길을 많이주지는 않습니다. 마지막 줄은 항상 ".... 명령 요청 : waitForPageToLoad [30000, ...]"와 같이 '페이지 대기'입니다.

VS 디버거에서 테스트를 수행하면 문제가 재현되지 않습니다.

문제 자체가 알려진 문제, 또는 이것에 대한 해결 방법은

selenium.Open(GetRestartPageURL()); 
    selenium.WaitForPageToLoad("30000"); 

    selenium.Click("Button"); 
    selenium.WaitForPageToLoad("30000"); <-- this is where it times out even though the expected screen that is launched by "Button" is now displayed in the browser 

이다 나타난다 실제 코드? IE9와 Selenium 1.0의 문제입니까? 중요한시기에 파란색에서 나옵니다.

+0

당신은 시간 제한을 증가하고 있음을 볼 했 시험은 여전히 ​​실패하고 있습니까? – Hemanth

답변

1

이것은 IE9/10 및/또는 셀렌의 버그, 또는 IE9/10의 버그로 밝혀졌습니다. 셀렌의 사람들은 언제든지 해결할 수없는 것처럼 보입니다. 나는 브라우저에서 window.document.readyState를보고 WaitForPage 메서드를 작성하여 지연 시간을 모니터링하므로 시간 제한이 여전히 남아 있습니다.

internal static void WaitForPageToLoad(ISelenium selenium) 
{ 
    //Wait until the browser reports that it is no longer loading the page, or 'timeOut' has been reached. 
    //Pause 1/4 second between attempts (should normally be sufficient for the page to load, unless it is a very slow page) 
    const int timeOut = 30000; //mS 
    const int pause = 250;  //mS 

    int timeWaited = 0; 

    do 
    { 
     System.Threading.Thread.Sleep(pause); 
     timeWaited += pause; 
    } 
    while (selenium.GetEval("window.document.readyState") != "complete" && timeWaited<timeOut); 

    if (timeWaited >= timeOut) 
    { 
     //abort test and notify error: 
     Assert.Fail("Expected page was not dislpayed"); 
    } 
} 

는이 버그를 참조하는 셀레늄 버그 추적기에 두 가지 문제가 있습니다 : 그것은 다른 사람 도움이 될 것입니다 경우 여기

은, 코드의 16392451