2012-09-28 15 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")); 

綁找到色帶

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

或發現所有的孩子

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

似乎沒有任何工作。

回答

0

您看到的不一致可能是由於UIA Verify使用的是UIA庫的本地COM版本,而白色仍然使用舊的託管庫。

根據我的經驗,本地庫比舊的託管庫更快,更穩定,更兼容,因此您應該考慮將代碼轉換爲使用它(或者如果您感覺慷慨,貢獻代碼到white on GitHub來更新它)。

自從我自己完成遷移以來,我已經有一段時間了,所以我不記得具體細節,但基本上需要生成一個interop DLL,它將允許.NET應用程序調用本地UIA方法。然後,您可以選擇創建自己的包裝庫或可能使用下面提到的包裝庫之一。在創建的COM API的包裝早企圖 -

UI Automation COM-to-.NET Adapter

我建議參照這些用於幫助正在過渡。我直接用這個方法遇到了麻煩,但最初看看是有幫助的。還要搜索一些關於由這個包裝器開發人員製作的COM API的MSDN支持論壇帖子。不幸的是,由於我的StackOverflow代表較低(長時間潛伏,第一次回答),因此無法鏈接到它們。

UIA Verify Source Code - 你可以看到他們在他們的源代碼中有一個用於訪問COM接口的UIAComWrapper。您也可以在該項目中瞭解他們如何生成interop DLL。