2013-05-28 30 views
1

我正在使用Visual Studio 2010 Ultimate - visual c# - codedUI。測試自動化 - CodedUI無法區分應用程序中的不同控件

我正在爲一個客戶端進行一些自動化測試(煙霧測試,迴歸測試等),但是我試圖做測試自動化的應用程序並不合作。 我已經自動化了所有客戶端的Web應用程序,沒有任何問題,但對於他們的桌面應用程序,我似乎無法獲得任何控件之間的任何唯一標識符。

下面是一個示例codedUI記錄,我通過一種樹狀結構,走在應用程序 - 我強調在列表中幾個不同的項目,展開列表中,單擊某個項目,瀏覽一個啓動窗口等

/// <summary> 
    /// SomeRecordedMethod 
    /// </summary> 
    public void SomeRecordedMethod() 
    { 
     #region Variable Declarations 
     WinTitleBar uINavigatorTitleBar = this.UISomeRandomCompanyWindow.UINavigatorWindow.UINavigatorTitleBar; 
     WinEdit uIObjectdescEdit = this.UISomeRandomCompanyWindow.UINavigatorWindow.UIDw_navigatorClient.UIObjectdescEdit; 
     WinClient uICalendar1Client = this.UISomeRandomCompanyWindow.UIMaintainCalendar1Window.UIItemWindow.uICalendar1Client; 
     #endregion 

     // Click 'Navigator' title bar 
     Mouse.Click(uINavigatorTitleBar, new Point(241, 9)); 

     // Click 'objectdesc' text box 
     Mouse.Click(uIObjectdescEdit, new Point(19, 11)); 

     // Click 'objectdesc' text box 
     Mouse.Click(uIObjectdescEdit, new Point(39, 10)); 

     // Double-Click 'objectdesc' text box 
     Mouse.DoubleClick(uIObjectdescEdit, new Point(37, 11)); 

     // Double-Click 'objectdesc' text box 
     Mouse.DoubleClick(uIObjectdescEdit, new Point(20, 11)); 

     // Double-Click 'objectdesc' text box 
     Mouse.DoubleClick(uIObjectdescEdit, new Point(42, 5)); 

     // Double-Click 'objectdesc' text box 
     Mouse.DoubleClick(uIObjectdescEdit, new Point(61, 11)); 

     // Click 'Calendar [1]' client 
     Mouse.Click(uICalendar1Client, new Point(632, 141)); 

     // Click 'Calendar [1]' client 
     Mouse.Click(uICalendar1Client, new Point(671, 200)); 

     // Click 'Calendar [1]' client 
     Mouse.Click(uICalendar1Client, new Point(675, 301)); 

     // Click 'Calendar [1]' client 
     Mouse.Click(uICalendar1Client, new Point(686, 396)); 

     // Click 'Calendar [1]' client 
     Mouse.Click(uICalendar1Client, new Point(686, 544)); 

     // Click 'Calendar [1]' client 
     Mouse.Click(uICalendar1Client, new Point(478, 547)); 

     // Click 'Calendar [1]' client 
     Mouse.Click(uICalendar1Client, new Point(579, 552)); 

     // Click 'Calendar [1]' client 
     Mouse.Click(uICalendar1Client, new Point(579, 552)); 
    } 

注意'objectdesc'和'Calendar [1]'的多個實例。每一次重複的發生都是不同的控制,但是動作記錄並沒有挑選出來。

當我嘗試運行測試時,我明顯得到:Microsoft.VisualStudio.TestTools.UITest.Extension.UITestControlNotFoundException:播放無法找到具有給定搜索屬性的控件。

我是新來測試Visual Studio中的自動化,所以我不知道我有什麼選擇在這一點上。任何建議將不勝感激。

謝謝

回答

2

對於許多控件不需要new Point(x,y)參數Mouse.Click(),但提供的是:有兩個或兩個以上的部分項目,如可以單擊一個按鈕,但也有一個下拉列表。你顯示的代碼中的(x,y)值表明所有編碼的用戶界面正在看到的是一個很大的控制,即整個日曆或整個uIObjectdescEdit,而不是其中的字段。

我懷疑應用程序使用了一些不支持編碼UI的自定義控件。從開發人員那裏瞭解應用程序是如何編寫的,使用了哪些技術(如WPF,Windows Forms,MFC等)以及使用了哪些自定義控件。然後根據Microsoft Coded UI網頁上的兼容性列表檢查答案。如果使用自定義控件,那麼您可能需要向這些控件的作者重複提問。

+0

感謝您的信息阿德里安。今天我不打算接觸開發者,但我會看看他們是如何編寫應用程序的。根據他們十多年前制定該計劃的所有帳戶。自那時起,他們一直在着手並更新它。我不認爲他們最近使用新技術完成了重建 - 我認爲他們使用的任何東西都已經有十年多了。 鑑於此,編碼UI /動作錄製可能不太可能,對吧? – LuFaMa

+0

讓我問一個後續問題 - 如果我不能對自己的CodedUI測試進行自動測試,我有什麼選擇?過去我曾經使用過像Vtask Studio這樣的自動化工具,但這些並不是非常強大的工具,只能用於勉強服務。我不想用這樣的東西來做一大堆測試。你有什麼建議? – LuFaMa

+0

@LuFaMa - 我沒有任何建議。 http://en.wikipedia.org/wiki/List_of_GUI_testing_tools可能會給你更多的想法。您對於舊計劃的評論支持我的答案中的理論。與開發人員交談,您可能很幸運,並且發現他們購買了一個控件庫,其中有一個新版本可正確支持Coded UI。 – AdrianHHH

相關問題