2012-09-28 2 views
1

나열된 모든 옵션을 시도했지만 흰색을 사용하여 창 컨트롤에서 리본을 찾을 수 없습니다. VisualUIAVerify가 트리로 표시합니다.WinForms UI 자동화 : VisualUIAVerify에서 Ribon을 찾을 수 없음

"window" "Test 0.0.1" "MainForm" 
    |--"pane" "Dock Top" "_MainForm_Toolbars_Dock_Area_Top" 
    |--"" "Ribbon" "" 
     |--"tab" "Ribbon Tabs" "" 
     |--"tab item" "Tools" "" 

"도구"탭 항목을 클릭하고 싶습니다. 만에 "창"

import clr 
import sys 
sys.path.append(r"C:\TEMP\white") 
clr.AddReference("White.Core") 
clr.AddReference("White.NUnit") 
from White.NUnit import * 
from White import * 
from White.Core import * 
from White.Core.Configuration import * 
from White.Core.UIItems import * 
from White.Core.UIItems.WindowItems import * 
from White.Core.UIItems.ListBoxItems import * 
from White.Core.UIItems.Container import * 
from White.Core.UIItems.Finders import * 
from White.Core.Factory import * 
from White.Core.Finder import * 
from White.Core.AutomationElementSearch import * 
from White.Core.WindowsAPI import * 

from System.Diagnostics import Process 
wp= Process(); 
wp.StartInfo.FileName = r"c:\TEMP\gui\TestShell.exe"; 
wp.StartInfo.Arguments = r"TestShell.taco -e DBA -s qa";   
wp.Start(); 
wapp = Application.Attach(wp); 
wnds=Application.GetWindows(wapp) 
wnd=wnds[0] 

#test 
>wnd.Name 
"Test 0.0.1" 

을 찾을 수 있습니다 심지어 클릭 수 탭 도구를 제공 좌표 (IronPython의).

def click(cp,mouse,x,y): 
    cp = wnd.Bounds.TopLeft; 
    cp.Offset(x, y); 
    mouse = Desktop.Instance.Mouse; 
    mouse.Location = cp; 
    mouse.Click(cp); 

cp = wnd.Bounds.TopLeft; 
mouse = Desktop.Instance.Mouse; 
mouse.Location = cp; 
mouse.Click(cp); 
click(cp,mouse,120,50) #tools 

구획에 도착 :

pn=wnd.GetElement(SearchCriteria.ByAutomationId("_MainForm_Toolbars_Dock_Area_Top")); 

모든 어린이

pn.FindAll(TreeScope.Children, Condition.TrueCondition) 

아무것도 작동하는 것 같다을 리본을

rbn=pn.GetElement(SearchCriteria.ByAutomationId("Ribbon")); 

를 찾거나 찾을 매는. 당신이보고있는

답변

0

일관되지는 여전히 이전 관리 라이브러리를 사용하는 것 UIA는 UIA 라이브러리과 흰색의 기본 COM 버전을 사용하고 있는지 확인 사실의 결과이다.

내 경험에 의하면 네이티브 라이브러리는 기존의 관리되는 라이브러리보다 빠르고 안정적이며 호환성이 높기 때문에 코드를 사용하도록 전환해야합니다 (또는 관대하고 기여하는 코드가있는 경우). 업데이트하려면 white on GitHub).

내가 직접 마이그레이션을 수행 한 이후로 시간이 지남에 따라 구체적인 내용은 기억할 수 없지만 .NET 응용 프로그램이 기본 UIA 메서드를 호출 할 수있게 해주는 interop DLL을 생성해야합니다. . 그런 다음 선택적으로 자체 래퍼 라이브러리를 만들거나 아래에 언급 된 래퍼 라이브러리 중 하나를 사용할 수 있습니다.

나는 전환을 제작에 도움이 참조 권하고 싶습니다 :

UI Automation COM-to-.NET Adapter를 - 초기 시도를 COM API에 대한 래퍼를 작성에서. 나는 이것을 사용하여 문제를 바로 잡았지만 초기에 살펴 보는 것이 도움이되었습니다. 또한이 래퍼 개발자가 작성한 COM API에 대한 MSDN 지원 포럼 게시물을 검색하십시오. 불행히도 내 낮은 StackOverflow 담당자 (오랜 시간 lurker, 처음으로 answerer) 때문에 그들에게 연결할 수 없습니다.

UIA Verify Source Code - 당신은 그들의 소스 코드에서 COM 인터페이스에 액세스하는 데 사용되는 UIAComWrapper을 볼 수 있습니다. 또한 프로젝트에서 interop DLL을 어떻게 생성하는지 살펴볼 수 있습니다.