Не работает шаблон автоматизации пользовательского интерфейса.net

Добрый день всем, есть проблемы с автоматизацией пользовательского интерфейса при попытке нажать кнопку в предупреждении безопасности Outlook при попытке отправить почту через Мой клиент, когда я пытаюсь отправить его, он показывает предупреждение, чтобы выбрать, хочу ли я разрешить электронную почту отправить или нет.

Пока это мой код, он распознает все, но когда дело доходит до вызова шаблона на кнопке разрешения, он ничего не делает, уже проверил свойство 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()

Есть идеи? Спасибо большое за помощь.

1 ответ

У меня нет перспективы на моем компьютере, но некоторые вещи приходят мне на ум. Прежде всего, вы пытаетесь найти дочерний элемент главного окна 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 для поиска главного окна (они всегда являются прямыми дочерними элементами рабочего стола).

Другие вопросы по тегам