User interface 用于查找元素AutomationId的UI自动化验证 我试图自动化测试用C++编写的应用程序。 我使用UI自动化: 我使用UIAVerify查找某些元素的automationIds,但某些元素在工具中显示为禁用(灰显)

User interface 用于查找元素AutomationId的UI自动化验证 我试图自动化测试用C++编写的应用程序。 我使用UI自动化: 我使用UIAVerify查找某些元素的automationIds,但某些元素在工具中显示为禁用(灰显),user-interface,ui-automation,User Interface,Ui Automation,这是否意味着某些元素的交互不可自动化?如何为没有AutomationId值的元素自动化交互 编辑:我正在尝试使用自动化单击一个控件,该控件具有ControlType.Custom,并为其设置了Name属性。有办法做到这一点吗?我尝试了这两种方法,但都失败了: 方法1: //using framework white var button = window.Get(SearchCriteria.ByControlType(ControlType.Custom).AndByText ("<Na

这是否意味着某些元素的交互不可自动化?如何为没有
AutomationId
值的元素自动化交互

编辑:我正在尝试使用自动化单击一个控件,该控件具有
ControlType.Custom
,并为其设置了
Name
属性。有办法做到这一点吗?我尝试了这两种方法,但都失败了:

方法1:

//using framework white
var button = window.Get(SearchCriteria.ByControlType(ControlType.Custom).AndByText ("<Name Property>"));
//使用白色框架
var button=window.Get(SearchCriteria.ByControlType(ControlType.Custom)和ByText(“”);
方法2:

//using Automation Framework
aeCtrl = aeParentPanel.FindFirst(TreeScope.Children,
                            new PropertyCondition(AutomationElement.NameProperty, "<Name Property>"));
//使用自动化框架
aeCtrl=aeParentPanel.FindFirst(TreeScope.Children,
新属性条件(AutomationElement.NameProperty,“”);
从链接到的Word.doc文件,从
codeplex
页面:

注意:自动化元素树中的暗显(不可用)节点表示该元素是UI自动化原始视图的成员,但不满足被视为内容视图或控件视图成员所需的条件。但是,仍然可以从VisualUIAutomationVerify测试元素。有关更多信息,请参阅UI自动化树概述。 这基本上意味着这些元素是“chrome”项,它们是菜单栏或滚动条之类的东西,而不是列表项之类的内容。它们仍然存在,可以测试

--

并非每个元素都有
自动ID
。这实际上取决于开发人员将这些设置为适合在测试中使用。在某些情况下,它们来自底层框架:例如,对于
Win32
控件,
控件ID
(如果存在)用于生成
自动ID
。在
WPF
中,您必须设置开发人员必须通过
AutomationProperties.AutomationId
附加属性分配它

通常,它仅为对话框中的控件设置,用于区分它们。控件中的项(例如列表框中的项)通常由其
名称
标识(对于其他控件,则为
)。对于从外部源生成的项目(例如包含文件名的列表),尤其如此,因为没有合理的方法可以预先在那里分配
自动ID

codeplex上的页面链接到的Word.doc文件:

注意:自动化元素树中的暗显(不可用)节点表示该元素是UI自动化原始视图的成员,但不满足被视为内容视图或控件视图成员所需的条件。但是,仍然可以从VisualUIAutomationVerify测试元素。有关更多信息,请参阅UI自动化树概述。 这基本上意味着这些元素是“chrome”项,它们是菜单栏或滚动条之类的东西,而不是列表项之类的内容。它们仍然存在,可以测试

--

并非每个元素都有
自动ID
。这实际上取决于开发人员将这些设置为适合在测试中使用。在某些情况下,它们来自底层框架:例如,对于
Win32
控件,
控件ID
(如果存在)用于生成
自动ID
。在
WPF
中,您必须设置开发人员必须通过
AutomationProperties.AutomationId
附加属性分配它


通常,它仅为对话框中的控件设置,用于区分它们。控件中的项(例如列表框中的项)通常由其
名称
标识(对于其他控件,则为
)。对于从外部源生成的项目(例如包含文件名的列表),尤其如此,因为没有合理的方法可以提前在那里分配
AutomationIDs

感谢您指向单词reference,我应该搜索它!我想我会对其他控件使用名称/值属性。这些“名称”可能会在我的产品的下一个版本中更改,因此需要解决…如果是您的产品,那么您应该能够将AutomationID分配给稳定的对象。AutomationID的另一个主要用途是作为“名称”的一种形式,它在本地化的构建中是稳定的——在那里不容易使用名称,因为每种语言的名称都会不同。你使用的是什么框架?Win32、WinFrm、WPF,还是别的什么?我的产品是用C++编写的。我认为,如果开发人员只使用托管语言编写产品,则可以分配AutomationID。我还能分配自动ID吗?提前感谢。它可以是普通的Win32—直接使用USER32控件—也可以是MFC。无论哪种方式,AutomationID都基于底层控件ID—通常是对话框模板中控件的ID,您也可以使用GetWindowLong(GWL_ID)获取/设置该ID—请与代码所有者联系以了解详细信息。如果他们已经在使用ID,并且它是稳定的,那么您可能可以使用它进行测试。但是如果他们在运行时动态地分配ID,那么你就不走运了。(如果他们不使用它,您可以引导他们将其设置为测试代码要使用的值…(…请注意,这些ID仅适用于整个HWND-因此适用于整个listbox或listview或tabstrip,但不适用于其中的单个列表项或选项卡项-您必须使用名称或其他东西来区分它们。)谢谢你指向单词reference,我应该搜索它的!我想我会使用名称/价值公关