Finding a button in IE11 (IUIAutomationElement)

六月ゝ 毕业季﹏ 提交于 2019-12-04 05:22:40

问题


I have been trying to use exactly the code given in the link below but I cannot get it to work with IE 11.

Automate saveas dialouge for IE9 (vba)

Copying the code for convenience:

Option Explicit
Dim ie As InternetExplorer
Dim h As LongPtr
Private Declare PtrSafe Function FindWindowEx Lib "user32" _ 
  Alias "FindWindowExA" (ByVal hWnd1 As LongPtr, _
  ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, _
  ByVal lpsz2 As String) As LongPtr

Sub Download()
  Dim o As IUIAutomation
  Dim e As IUIAutomationElement
  Set o = New CUIAutomation
  h = ie.Hwnd
  h = FindWindowEx(h, 0, "Frame Notification Bar", vbNullString)
  If h = 0 Then Exit Sub

  Set e = o.ElementFromHandle(ByVal h)
  Dim iCnd As IUIAutomationCondition
  Set iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, "Save")

  Dim Button As IUIAutomationElement
  Set Button = e.FindFirst(TreeScope_Subtree, iCnd)
  Dim InvokePattern As IUIAutomationInvokePattern
  Set InvokePattern = Button.GetCurrentPattern(UIA_InvokePatternId)
  InvokePattern.Invoke
End Sub   

The button is not found, meaning after executing

Set Button = e.FindFirst(TreeScope_Subtree, iCnd)

Button is still 'nothing'. Is IE11 any different from IE9 in this respect? Should I change "PropertyCondition" to something else or am I doing something wrong here? Thank you.


回答1:


Not sure if this solves your prob but maybe you are using IE in a installation language different from "EN-US". In this case you should replace

Set iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, "Save")

by the property name which you can take verbatim from the button, e.g. for "DE-DE"

Set iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, "Speichern")

That helped for me. However I find it disgusting ....



来源:https://stackoverflow.com/questions/34417837/finding-a-button-in-ie11-iuiautomationelement

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!