目标元素对应于不再可用的UI

时间:2016-04-04 19:19:41

标签: c# .net ui-automation microsoft-ui-automation

$("meta[name='keywords']").attr("content", "hello");

此代码在最后一行引发异常。

  

目标元素对应于不再可用的UI(例如,父窗口已关闭)      在MS.Internal.AutomationProxies.Misc.ThrowWin32ExceptionsIfError(Int32 errorCode)
     在MS.Internal.AutomationProxies.Misc.ProxySendMessage(IntPtr hwnd,Int32 msg,IntPtr wParam,IntPtr lParam)
     在MS.Internal.AutomationProxies.WindowsListBox.ListboxItem.System.Windows.Automation.Provider.ISelectionItemProvider.get_IsSelected()

那么,这可能是什么问题?

另外,另一个问题是,"当前"是AE_ComboBox = uia.GetElementByControlTypeAndAutomationId(globalSettings, ControlType.ComboBox, "1"); AE_TargetValue = uia.GetElement(AE_ComboBox, value, true); SelectionItemPattern SIP = AE_TargetValue.GetCurrentPattern(SelectionItemPattern.Pattern) as SelectionItemPattern; SIP.Select(); Thread.Sleep(2000); SIP.Current.IsSelected 的意思? (我确信这并不意味着当前选定的元素。)

2 个答案:

答案 0 :(得分:1)

我也遇到了同样的问题。我在一行中获取了automationElement,并在第二行通过Current属性访问它。 “当前”属性再次进入目标应用程序的过程,以便在访问时获取值。因此,在此跨进程调用期间,如果您的ui元素可能不再可用,则会发生此异常。即使你有automationElement对象,它也是无效的。

如果您只想获取值,可以尝试使用CacheRequet然后使用automationELement对象的Cached属性。

答案 1 :(得分:0)

如果您使用WPR并且尚未初始化组合,通常从数据库中读取需要很长时间的项目,然后访问该组合,则会收到此异常。 因此,您需要等待直到组合在循环中初始化(并且可能会休眠)