0

웹 응용 프로그램에 "Microsoft UI Automation"을 사용해 본 사람이 있습니까?웹 응용 프로그램 용 Microsoft UI 자동화

wpfbrowser가 포함 된 WPF 응용 프로그램이 있습니다. 이 앱은 기본적으로 데스크톱 앱이므로 Selenium Webdriver를 사용할 수 없습니다.

나는 CodedUI을 시도하지만 난 내가 여기 물어 가지고 문제에 직면하고있다 : Coded UI - Unable to identify a html controls on a Wpfbrowser

내가 UIAutomation을 사용할 계획, 그러나 다시 내가 ID 속성

를 사용하여 컨트롤을 식별 할 수없는 오전 itseems 오전

예 :이를 위해

<button id="but1">Click Me</button> 

는 내가 가지고 :

PropertyCondition ps = new PropertyCondition(AutomationElement.AutomationIdProperty, "but1"); 
AutomationElement Clickme = elementMainWindow.FindFirst(TreeScope.Descendants, ps); 

하지만 작동하지 않습니다. "Clickme"은 null입니다.

이 작업을 수행하는 방법은 UIAutomation ??

편집 : 나는 컨트롤에 당신이 찾고있는 대신 사망자에 따라 그 일을 아래 트리보기를 탐색 실제로 시도 할 것이다 enter image description here

+0

원시 트리보기의 계층 구조를 보여주는 inspect의 화면을 캡처 할 수 있습니까? 내가 가진다면 내가 너를 도울 수있을거야. –

+0

@MaxYoung, 스크린 샷을 추가했습니다. 이걸로 충분하길 바래. – user2048204

답변

0

하십시오 screeshot 연결. 또한 null 일 경우 재 시도 루프를 시도 할 수도 있습니다. FlaUI 용 일반 Retry의 예입니다. 따라서 코드는 이와 같이 보일 것입니다.

PropertyCondition ps = new PropertyCondition(AutomationElement.AutomationIdProperty, "but1"); 

Func<AutomationElement> func =() => elementMainWindow.FindFirst(TreeScope.Descendants, ps); 
Predicate<AutomationElement> retry = element => element == null; 

AutomationElement clickMe = Retry.While<AutomationElement>(func, retry, TimeSpan.FromSeconds(1)); 

그래서이 코드는 1 초 동안 요소를 찾는 시도하고 요소가 다시 널 (null) 제공하거나 예외 경우를 찾는 시도합니다. 그 중 하나가 발생하면 200 밀리 초 기다렸다가 다시 시도합니다. 이렇게하면 요소를 찾으려고 할 때 요소가 렌더링되지 않거나 검사를 통해 요소를 찾는 방법과 System.Windows.Automation에서 요소를 찾는 방법의 차이 일 경우 알 수 있습니다.

이것이 작동하지 않으면 트리 워커를 사용하여 솔루션을 게시 할 예정이지만이 솔루션을 트리 워커에 사용하는 것이 좋습니다. 다른 사람이이 기능을 사용하려면 자동화 기능을 쓰고 싶기 때문입니다. 당신이 그들을 사용하려고하는 방법.

0

<button id="but1">이 (는) automationId와 같으면 확실하지 않습니다. WPF 응용 프로그램에만 해당되는 UI (XAML)를 정의한 코드에서 해당 네임 스페이스를 사용할 수있는 경우 자동화 ID는 AutomationProperties.AutomationId="but1"을 사용하여 설정할 수 있습니다.

UI가 HTML로 정의 된 경우 단추의 캡션을 사용할 수 있다고 생각하십시오. 이렇게 뭔가가.

var ps = new AndCondition(new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Button), 
       new PropertyCondition(AutomationElement.NameProperty, "Click Me")); 

AutomationElement Clickme = elementMainWindow.FindFirst(TreeScope.Descendants, ps); 

ControlTypeProperty는 유형별 결과 필터링에 도움이 될 수 있습니다. 필수는 아니지만 다른 유형의 자동화 요소가 있지만 이름 특성이 동일한 경우 도움이 될 수 있습니다.