2012-11-19 101 views
2

在WPF應用程序的自動化中(使用UI自動化; VSTS 2010),我們手動將所有自動化ID添加到資源文件中,然後逐個訪問它。考慮到應用程序可以隨時擴展,手動添加這些ID可能會變得單調乏味。如何獲取文件中WPF應用程序的所有AutomationID?

那麼,有什麼工具可以爲我們創造這個嗎?即以分層格式獲取所有ID並將其存儲在文件(xml或csv)中,然後我們可以在需要時解析它。

我希望像UISpy的工具,它不僅可以窺視的所有元素,而且輸出相同。

是否存在這樣的工具?還是有其他方法?

任何有價值的反饋是高度讚賞。

謝謝!

回答

0

直接在XAML分配自動化的ID,然後解析XAML文件,因爲它們是XML畢竟...

+0

m0sa ..感謝您的回覆。但問題是,我們有多個XAML文件,我們如何才能讓自動化IDS以分層格式? – Srees

1

我這樣做:

public static class AutomationIds 
{ 
    public static readonly string MyDataGridId= Create(); 

    private static string Create([CallerMemberName] string name = null) 
    { 
     return name; 
    } 
} 

<DataGrid AutomationProperties.AutomationId="{x:Static local:AutomationIds.MyDataGridId}" 
      ... /> 

然後在測試中

var dataGrid = window.Get<ListView>(AutomationIds.MyDataGridId); 
0

讓我們看... 首先,我認爲你的數據不是分層的 - 只是因爲一個控件可以動態地分配給另一個控件。

如果我們改變問題的一個子集:「我們怎樣才能在時間t得到控制的層次結構視圖」那麼我們可以用MS UIA回答這個問題,並且說,使用一個簡單的RawViewWalker(只是在walker上進行簡單的廣度優先搜索,從您的主窗口開始) - 當然應用程序正在運行,以便UIA可以訪問和查詢它)。

但是這個子集將不能滿足您最初的問題,因爲你可能會看到你的整個UI收集的部分(因爲有些人會被隱藏/未在時間t尚未激活)。

因此,使用基於UIA的工具(例如uispy)變得非常困難,因爲那樣您將不得不將應用程序視圖設置爲不同的狀態以在不同的時間t1,t2到達應用程序中的所有控件。 。

我建議在同一時間解析所有的XML,並構建應用程序的「靜態」控制圖,我相信這將是最接近你問了一個完整的樹。

考慮到這是一個老問題,我懷疑它的問題了,但只是想在這裏做的區別。

相關問題