2016-04-29 2 views
0

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

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

Любые идеи ?, большое спасибо за вашу помощь.

ответ

0

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

Смежные вопросы