我正在将一些UI自动化从System.Windows.Automation API移植到本机UIAutomationClient API,并且遇到了一个简单的问题,但找不到解决方案。
我需要使用以下代码中的代码来查找UI元素:
IUIAutomationElement namedElement = currentWindow.FindFirst(UIAutomationClient.TreeScope.TreeScope_Descendants, nameCondition);
这里,nameCondition对象应该是IUIAutomationCondition,以将元素的名称与字符串进行比较。
使用旧的System.Windows.Automation我会把它写成:
PropertyCondition nameCondition = new PropertyCondition(AutomationElement.NameProperty, "name");
但是,我无法弄清楚如何使用UIAutomation API来创建PropertyCondition。我见过的唯一例子似乎在这些方面提出了一些建议:
IUIAutomationCondition nameCondition = cuiAutomation.CreatePropertyCondition(propertyIdName, "name");
这里,propertyIdName应该是一个表示NameProperty的int。但是,我无法弄清楚如何在这里获得正确的int。我假设它必须在UIAutomation API中作为常量,但无法找到它。
答案 0 :(得分:1)
我发现了以下有用的页面,其中列出了这些属性ID的值:http://msdn.microsoft.com/en-us/library/windows/desktop/ee684017(v=vs.85).aspx
例如:UIA_AutomationIdPropertyId = 30011
使用此页面,我在代码中为我需要使用的属性ID定义了int常量。我不认为这可能是正确的答案,但至少它能让我取得进步。
答案 1 :(得分:0)
不是一个完整的答案,但我在UIAutomationClient.UIA_PropertyIds
中找到了值。不幸的是,尝试直接从您的代码访问它们仍然会导致错误,但您可以轻松地“转到定义”来获取ID值。