UI自动化验证是否找到元素的AutomationId

时间:2011-12-13 07:19:17

标签: user-interface ui-automation

我正在尝试自动测试用C ++编写的应用程序。 我使用UI Automationhttp://msdn.microsoft.com/en-us/library/ms747327.aspx 我使用UIAVerify查找某些元素的automationIds,但某些元素在工具中显示为已禁用(灰显)。

是否意味着某些元素的交互不可自动化?如何自动化没有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>"));

1 个答案:

答案 0 :(得分:4)

来自codeplex"How To Use UI Verify"页上链接到的UIA Verify Word .doc文件:

注意自动化元素树中的灰色(不可用)节点表示该元素是UI自动化原始视图的成员,但不符合被视为内容视图或控制视图。但是,仍可以从Visual UI Automation Verify中测试该元素。有关更多信息,请参阅UI自动化树概述。

这基本上意味着这些元素是'chrome'项目,它们是菜单栏或滚动条等内容,而不是列表项等内容。它们仍在那里,可以进行测试。

-

并非每个元素都有AutomationID。开发人员可以将这些设置为适合用于测试。在某些情况下,它们来自底层框架:例如,对于Win32控件,Control ID - 如果存在 - 用于生成AutomationID。在WPF中,您必须设置deverloper必须通过AutomationProperties.AutomationId附加属性进行分配。

通常它只是对话框中控件的设置,用于区分它们。控件中的项目 - 例如。列表框中的项目通常由Name标识(或Value,用于其他控件)。对于从外部源生成的项(尤其是包含文件名的列表)的情况尤其如此,因为没有合理的方式AutomationIDs可以提前分配。