UI自动化.net调用模式不起作用

时间:2016-04-29 17:10:01

标签: .net ui-automation automationelement

大家好,在尝试通过我的客户端发送邮件时尝试单击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()

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

1 个答案:

答案 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搜索主窗口(它们总是桌面的直接子项)。