2016-11-21 4 views
0

설명 아프게하지 않습니다 MFC 응용 프로그램코딩 된 UI WaitForControlReady (200) 타임 아웃에

원하는 작업을 - 경우 하위 창을 열고 확인합니다. 창에있는 고유 버튼으로 하위 창을 식별하십시오.

문제 : 창이 닫히면 200 밀리 초 후에 false를 반환하는 대신 다음 코드가 7 초 = 타임 아웃을 기다립니다.

버튼 자체가 고유의 검색 특성을 가지고 있지 않으며, 고유하게 WinWindow 래퍼 GeneralUIMap에 의해 식별 될 수 있기 때문에, 버튼을 나타냅니다 winwindow GeneralUIMap : 당신이 그것을 기다릴 때

class x{ 
    private UITestControl mainApplicationWindow; //main application window 
    private WinWindow GeneralUIMap; 
    private WinButton btnZoomAdd; 

    X(){ 
     mainApplicationWindow = new WinWindow(); 
     mainApplicationWindow.TechnologyName = "MSAA"; 
     mainApplicationWindow.SearchProperties UITestControl.PropertyNames.Name] = " - Main Window - Welcome"; 

     GeneralUIMap = new WinWindow(mainApplicationWindow); 
     GeneralUIMap.SearchProperties[WinWindow.PropertyNames.ControlId] = "8546"; 
     btnZoomAdd = new WinButton(GeneralUIMap); 



    } 
    public bool isVisible() 
    { 
     WinWindow w = new WinWindow(mainApplicationWindow); 
     w.SearchProperties[WinWindow.PropertyNames.ControlId] = "8546"; 

     try 
     { 
      w.WaitForControlReady(200); 
     } 
     catch (Exception e) 
     { 
      return false; 
     } 

     return true; 
    } 

답변

0

는 윈도우가 존재 하는가 준비 되니? 그렇지 않으면 함수는 널 예외를 발생시킵니다. 이 예외는 코딩 된 UI가 제어권을 포기하기 전에 찾아 null을 반환하기 때문에 시간이 오래 걸립니다.

WaitForControlReady()를 사용하기 전에 조건으로 WaitForControlExist() 또는 TryFind()을 사용하십시오.

또한 WaitForControlReady()는 제한 시간에 도달하면 false를 반환합니다. 그러나 WaitForControlReady() 값을 평가하지 않기 때문에 코드는 실제로 예외를 제외하고 항상 true를 반환합니다.

if (w.TryFind() && w.WaitForControlReady(200)) 
{ 
    return true; 
else 
{ 
    return false; 
} 

IMO, 200 MS는 정말 시간 초과 시간의 짧은 양을 대신 시도 캐치의

이 사용. 거짓 오류가 발생할 수 있습니다. 다른 경우 UI 성능 유효성 검사에서 합당한 시간 초과가 있어야합니다. 코드화 된 UI에서 기본 제한 시간은 3000ms로 충분합니다. 그러나 그것을 늘리는 것을 주저하지 마십시오.

조건이 개체의 상태에 관계없이 끝날 때까지 대기하는 지연과 달리 조건이 충족되지 않는 경우에만 제한 시간에 도달한다는 것을 기억하십시오. 또한 자동화 된 테스트는 규칙적이기 때문에 인간보다 훨씬 빠릅니다.

"IsVisible()"메서드는 정확하게 창 표시 상태를 반환하지 않습니다.

w.WaitForControlPropertyNotEqual(UITestControl.PropertyNames.State, ControlStates.Invisible) 

어쩌면 너무 :

w.WaitForControlPropertyNotEqual(UITestControl.PropertyNames.State, ControlStates.Offscreen); 
코딩 된 UI로, 난 당신이있을 때 컨트롤이 클릭 포인트 보이도록 considere있는 또는 ControlStates을 확인할 수있을 것 같아요