我尝试了Uiautomation方法findAll和findFirst,但是找不到编辑控件(请参阅捕获WindowCapture.jpg),而当我打开inspect.exe查找编辑控件时,找到了编辑控件(请参阅InspectCapture。 jpg)。
所以问题是findAll或findFirst方法找不到编辑控件的原因是什么?还有其他方法可以找到编辑控件吗?
详细信息: findAll方法的情况: 除了编辑控件外,所有控件都可以在窗口中找到,而名为“份数:”的文本可以作为微调控件找到,其className为“ msctls_updown32”。 findFirst方法的情况: 显示异常“ ctrlElement什么都没有”。(这意味着找不到预期的编辑控件。)
附加文件: WindowCapture.jpg InspectCapture.jpg
这是我的代码(VB):
Imports System.Windows.Automation
Module Module1
Sub Main()
Dim windowElement As AutomationElement
Dim ctrlElement As AutomationElement
Dim ctrlElements As AutomationElementCollection
Dim ctrlIndex As Integer
windowElement = AutomationElement.RootElement.FindFirst(TreeScope.Descendants, New PropertyCondition(AutomationElement.NameProperty, "Microsoft Print To PDF 高级选项"))
ctrlElements = windowElement.FindAll(TreeScope.Descendants, Condition.TrueCondition)
'Check all the controls found in the windowElement by FindAll method
For ctrlIndex = 0 To ctrlElements.Count - 1
Console.WriteLine(ctrlElements(ctrlIndex).GetCurrentPropertyValue(AutomationElement.NameProperty) & " " &
ctrlElements(ctrlIndex).GetCurrentPropertyValue(AutomationElement.ClassNameProperty))
Next
'Check the edit control in the windowElement by FindFirst method with NameProperty and ClassNameProperty
ctrlElement = windowElement.FindFirst(TreeScope.Descendants, New AndCondition(New PropertyCondition(AutomationElement.NameProperty, "份数:"),
New PropertyCondition(AutomationElement.ClassNameProperty, "Edit")))
Console.WriteLine(ctrlElement.GetCurrentPropertyValue(AutomationElement.NameProperty) & " " &
ctrlElement.GetCurrentPropertyValue(AutomationElement.ClassNameProperty))
Console.ReadLine()
End Sub
End Module
备注: 如果微调器控件的位置不在编辑控件上方,则意味着微调器控件位于编辑控件旁边,然后可以找到编辑控件。