大家好,在尝试通过我的客户端发送邮件时尝试单击Outlook安全警告上的按钮时遇到UI自动化问题,当我尝试发送邮件时,它会显示警报提示以选择是否允许是否发送电子邮件。
到目前为止,这是我的代码,它识别所有内容,但是当它涉及在allow按钮上调用模式时,它什么都不做,已经检查了ispassword属性以检查此按钮是否已锁定但到目前为止没有运气。< / p>
aeDesktop = AutomationElement.RootElement
Dim ipClickOkBtn As InvokePattern
Dim numwaits As Integer
Do
aeOut = aeDesktop.FindFirst(TreeScope.Subtree, New PropertyCondition(AutomationElement.NameProperty, "Microsoft Outlook"))
numwaits += 1
Thread.Sleep(100)
Loop While aeOut Is Nothing AndAlso numwaits < 50
If Not IsNothing(aeOut) Then
aePass = aeOut.FindFirst(TreeScope.Children, New PropertyCondition(AutomationElement.NameProperty, "Allow"))
Dim isTextPassword As Boolean = CBool(aePass.GetCurrentPropertyValue(AutomationElement.IsPasswordProperty))
End If
ipClickOkBtn = DirectCast(aePass.GetCurrentPattern(InvokePattern.Pattern), InvokePattern)
aePass.SetFocus()
SendKeys.SendWait(vbCr)
SendKeys.SendWait("{ENTER}")
ipClickOkBtn.Invoke()
有什么想法吗?非常感谢你的帮助。
答案 0 :(得分:0)
我的计算机上没有外观,但我想到了一些事情。首先,您正在尝试查找具有名称属性“允许”的Outlook主窗口的子项,并假设它是您正在查找的“确定”按钮。我怀疑情况并非如此。一个对话框(这是一个对话框不是吗?)通常是主窗口的直接子代,所以我假设你找到对话框为aePass,然后尝试获取对话框的调用模式(但不能,因为对话框可能没有调用模式)。我建议您首先在对话框下找到按钮作为自动化元素,然后获取该元素的调用:
aePass = aeOut.FindFirst(TreeScope.Children, New PropertyCondition(AutomationElement.NameProperty, "Allow"))
ipClickOkBtn = aePass.FindFirst(TreeScope.Children, New PropertyCondition(AutomationElement.NameProperty, "<put the button name here>"))
clickOkInvoke = DirectCast(ipClickOkBtn.GetCurrentPattern(InvokePattern.Pattern), InvokePattern)
另外,我必须通过以下方式添加搜索桌面子树不是一个好主意:
aeOut = aeDesktop.FindFirst(TreeScope.Subtree,
相反,使用TreeScope.Children搜索主窗口(它们总是桌面的直接子项)。