2014-02-14 2 views
0

코드화 된 UI를 VS2012에서 사용합니다. 흥미로운 문제를 해결하고 싶습니다. 예를 들어 창을 가지고 있고 동적 콘텐츠가있는 응용 프로그램이 있습니다. 제목을 통해이 창을 검색하고 싶습니다.코드화 된 UI에서 정규 표현식으로 검색

"AAAAAAAA This is a window title ASDASDASD or" 
"BBBBBBBB This is a window title WSDWSDWSD or not" 
"CCCCCCCC This is a window title ASDASDASD or" 
"........ This is a window title ASDASDASD" 

내가 "여부" "이것은 창입니다 을"을 포함 뭔가를 검색하고 싶습니다 : 다음 타이틀은 가능한 경우입니다. 정규 표현식을 사용할 수 있다면 다음 표현식을 사용하여이 제목을 찾으십시오. *이 창은 *입니다.

나는 이것이 하나의 예에 불과하다는 것을 강조한다. 필수적으로 일부 수정 문자열이 포함 된 제목이 있습니다.

저는 UITestControl에 SearchProperties라는 이름의 PropertyExpressionCollection이 있다는 것을 알고 있습니다. PropertyExpression (propertyName, propertyValue, conditionOperator) 객체를 추가 할 수 있습니다. 문제는 :

WinWindow.SearchProperties.Add(WinWindow.PropertyNames.Name,"This is a window", PropertyExpressionOperator.Contains); 
WinWindow.SearchProperties.Add(WinWindow.PropertyNames.Name,"or not", PropertyExpressionOperator.Contains); 

어떻게 내가 그것을 하나의 간단한 단계에서 수행 할 수 있습니다 내가 (공식적으로) 두 단계로 SearchProperties를 결정할 수 있습니다? 또는이 솔루션을 구현할 수있는 솔루션은 무엇입니까? 사전에

감사합니다, 피터

+0

하나의 속성에 대해 두 가지 검색 조건을 설정할 수 없습니다. 두 번째 코드는 코드에서 첫 번째로 덮어 쓰면 첫 번째 편집기를 덮어 쓰고 가장 복잡한 편집기는 허용하지 않습니다. 유일한 검색 속성이 "Name contains ..."인 경우 FindMatchingControls가 작동하지 않는 것 같습니다. 험난한 너트. – kida

+0

'SearchProperties'에서 하나의 검색 조건을 설정할 수 있어야하고, 다른 하나는'FilterProperties'에서 설정할 수 있어야합니다. 그런 다음 FindMatchingControls를 사용하십시오. – AdrianHHH

답변

0

위에서 언급 한 이유로 최상의 솔루션은 바탕 화면 아래의 모든 창을 반복하는 것입니다. 여기에 내가 너무 자랑 아니에요 (I는 메모장 창을 찾고 있어요 테스트 용) 조각은,하지만 두 번째 아래 작품 마감 : 그것에 대해 일곱 번 이었기 때문에

UITestControl result = null; 
var TM = Playback.GetCoreTechnologyManager("MSAA"); 
var desktop = UITestControl.Desktop.GetChildren()[1].GetProperty(UITestControl.PropertyNames.UITechnologyElement) as UITechnologyElement; 
var windowEnumerator = TM.GetChildren(desktop, null); 
windowEnumerator.Reset(); 
while (windowEnumerator.MoveNext()) 
{ 
    UITechnologyElement current = windowEnumerator.Current as UITechnologyElement; 
    if (current.Name != null && 
     current.Name.Contains("Notepad") && 
     current.Name.Contains("Untitled")) 
     { 
      result = UITestControlFactory.FromNativeElement(current.NativeElement, "MSAA"); 
      break; 
     } 
    } 
} 

본인은 MSAA 기술 관리자를 사용 UITestControls를 사용하는 것보다 빠릅니다. MSAA 수준 (IAccessible)으로 내려 가서 약 50 밀리 초 내에 작업을 완료 할 수 있지만 WinApi 기능을 사용하면 동일한 결과를 얻을 수 있습니다.

죄송합니다. 현재이 문제에 대한 간단한 해결책을 생각할 수 없습니다.

0

1. 페이지의 제목이 동적으로 생성하는 방법을 알고 있다면, 는 정적 변수/클래스를 만들고 제목을 생성 그것을 할 수있는 방법의 몇 가지가 있습니다 런타임에 코드를 사용하십시오.

  1. 가능한 제목을 알고있는 경우 정적 클래스를 만들고 여기에 값을 하드 코딩하십시오.
+0

이러한 제안을 보여주는 몇 가지 코드를 보여줄 수 있다면 도움이 될 것입니다. – AdrianHHH

관련 문제