2011-12-13 166 views
1

我試圖自動化測試用C++編寫的應用程序。 我使用UI Automationhttp://msdn.microsoft.com/en-us/library/ms747327.aspx 我用UIAVerify找到一些元素的automationIds,但某些元素在工具中顯示爲禁用(變灰)。UI自動化驗證找到元素的AutomationId

是否意味着某些元素的交互不可自動化?如何自動化一個沒有AutomationId值的元素的交互?

編輯:我試圖使用自動化點擊有ControlType.Custom並具有Name它的屬性集控制。有沒有辦法做到這一點?我想這兩個方面,都失敗:

方法1:

//using framework white 
var button = window.Get(SearchCriteria.ByControlType(ControlType.Custom).AndByText ("<Name Property>")); 

方法2:

//using Automation Framework 
aeCtrl = aeParentPanel.FindFirst(TreeScope.Children, 
          new PropertyCondition(AutomationElement.NameProperty, "<Name Property>")); 

回答

4

從已連結從UIA Verifycodeplex"How To Use UI Verify"的Word .doc文件:

注意 Automa中的變暗(不可用)節點元素樹指示該元素是UI自動化原始視圖的成員,但不符合被視爲內容視圖或控制視圖成員的必要條件。但是,該元素仍然可以通過Visual UI Automation驗證進行測試。有關更多信息,請參閱UI自動化樹概述。

這基本上意味着這些元素是'chrome'項目,它們就像菜單欄或滾動條,而不是像列表項那樣的內容。他們仍然在那裏,可以測試。

-

並不是每一個元素都有一個AutomationID。開發人員真的需要將這些設置爲適合在測試中使用。在某些情況下,它們來自底層框架:例如,對於Win32控件,Control ID(如果存在)用於生成AutomationID。在WPF中,您必須設置deverloper必須通過AutomationProperties.AutomationId附加屬性進行分配。

通常,它僅用於對話框中的控件,並用於區分它們。控件中的項目 - 例如。列表框中的項目 - 通常由它們的Name代替(或Value,用於其他控件)。對於從外部來源生成的項目(例如包含文件名的列表),尤其如此,因爲沒有合適的方式可以在那裏預先分配AutomationIDs

+0

感謝指向單詞引用,我應該已經搜索過!我想我將使用其他控件的名稱/值屬性。這些'名稱'可能會在我的產品的下一個版本中發生變化,所以需要解決方法... – user96403

+0

如果它是您的產品,那麼您應該能夠將AutomationID分配給某些穩定的東西。 AutomationID的另一主要用途是作爲'名稱'的形式,在本地化版本中保持穩定 - 不容易在其中使用名稱,因爲它在每種語言上都會有所不同。你使用的是什麼框架 - Win32,WinForms,WPF或其他東西? – BrendanMcK

+0

我的產品是用C++編寫的。如果開發人員僅使用託管語言編寫產品,我認爲AutomationID可以由開發人員分配。我還可以分配AutomationID嗎?提前致謝。 – user96403