0

大家好,在尝试通过我的客户端发送邮件时尝试单击 Outlook 安全警告上的按钮时遇到 UI 自动化问题,当我尝试发送邮件时,它会显示警报提示以选择我是否要允许电子邮件发送与否。

到目前为止,这是我的代码,它可以识别所有内容,但是在调用允许按钮上的模式时,它什么也不做,已经检查了 ispassword 属性以检查此按钮是否已锁定,但到目前为止还没有运气。

 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()

有什么想法吗?,非常感谢您的帮助。

4

1 回答 1

0

我对我的电脑没有前景,但我想到了一些事情。首先,您尝试查找名称属性为“Allow”的 Outlook 主窗口的子窗口,并且您假设它是您要查找的 OK 按钮。我怀疑情况并非如此。一个对话框(它不是一个对话框吗?)通常是主窗口的直接子窗口,所以我假设您将对话框作为 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 搜索主窗口(它们始终是桌面的直接子窗口)。

于 2016-05-05T08:17:53.803 回答