2009-04-15 4 views
1

watiN에서 WaitforComplete()을 사용하고 있지만 잘 작동하지 않는 것 같습니다. 기다릴 시간을 더 주더라도 다음 명령문을 실행합니다. thread.sleep()을 사용하여 원하는 페이지 나 요소를 얻을 때까지 응용 프로그램을 중지합니다. 하지만 문제는 페이지가 너무 동적이어서 때로는 지정된 시간이 오래 걸리는 경우입니다.페이지의 요소를 기다리는 더 좋은 방법은 무엇입니까 Waitforcomplete() 또는 system.threading.thread.sleep()

더 나은 해결책. 페이지를 잡는 모든 것들이 동적으로 돌아오고 응용 프로그램에서 다음 문장을 실행하지 않습니다.

'Show Details page 
    Assert.AreEqual("Confirmation", _internetExplorer.Title) 

    If (_internetExplorer.Button(Find.ById(New Regex("btnFinish"))).Exists) Then 
     _internetExplorer.Button(Find.ById(New Regex("btnFinish"))).Click() 
    Else 
     Assert.Fail("Could not Find Finish Booking Button on Confirmation Page") 
    End If 

    System.Threading.Thread.Sleep(100000) 

'쇼 예약 요약 페이지 Assert.AreEqual ("디스플레이 예약", _internetExplorer.Title)

코드의

샘플 동적으로 페이지의 반환을 감지 무언가를 원한다. 어떤 상수 값을주는 대신에.

답변

4

WaitForComplete 방법은 esentially 브라우저가 설정되면이 comllete하는 readyState가 거짓이고 바쁜 상태로 이동한다.

내가 일반적으로하는 일은 필요한 것을 액세스하고, thread.sleep을 30 초 동안 수행 한 다음 다시 시도하십시오. 또한 글로벌 타임 아웃이 10 초 후에 종료됩니다.

int timeout = 20; 
    bool controlFound = false; 
    for (int i = 0; i < timeout; i++) 
    { 
     if (_internetExplorer.Button(Find.ById(New Regex("btnFinish"))).Exists) 
     { 
      _internetExplorer.Button(Find.ById(New Regex("btnFinish"))).Click(); 
      controlFound = true; 
      break; 
     } 
     else 
     { 
      System.Threading.Thread.Sleep(500); 
     } 
    } 


    if (!controlFound) 
    { 
     Assert.Fail("Control not found"); 
    } 
0

다음 명령문을 실행하는 경우 해당 요소를 찾아야합니다. 나는 당신이 시도하는 코드의 샘플을 게시하는 것이 좋습니다.

5

WaitForComplete는 작업 후 포스트 백이있는 경우에만 제대로 작동합니다. 그렇지 않으면 기다릴 다른 것을 찾아야합니다. 지정된 타이틀 대기하는 방법에 대한 예를 다음과 같습니다

_internetExplorer.Element("title", "Confirmation").WaitUntilExists(); 

난 항상 contraint이 충족 될 때까지 WaitXXX 방법은 기다리지 않는 원인 대신에 Thread.sleep의 WaitXXX의 방법 중 하나를 사용하는 것을 선호합니다. 수면이 지정한 시간 동안 기다리는 곳. 그게 길면, 시간은 허리가 잘립니다. 문제가 발생하면 문제가 발생합니다.

HTH, 제론은