SetValue ValuePattern не работает для элемента управления браузера Chrome, такого как редактирование адреса (вызвано исключение)

Я пытаюсь использовать UIA для управления операциями браузеров (например, chrome, firefox), такими как нативация, возврат назад, переход вперед и т. д. для некоторых необходимых испытаний. Я попытался написать демонстрационный код, но столкнулся с некоторыми проблемами. Я получил AutomationElement для редактирования адреса для Chrome и попытался установить для него URL-адрес с помощью ValuePattern, но я получил исключение ниже:

在 System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
在 MS.Internal.Automation.UiaCoreApi.CheckError(Int32 hr)
在 System.Windows.Automation.ValuePattern.SetValue(String value)
在 BrowserControl.Browser.Browser.Goto(String url) 位置 C:\Users\darren\documents\visual studio 2010\Projects\BrowserControl\BrowserControl\Browser\Browser.cs:行号 109
在 BrowserControl.Program.Main(String[] args) 位置 C:\Users\darren\documents\visual studio 2010\Projects\BrowserControl\BrowserControl\Program.cs:行号 17
在 System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
在 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
在 System.Threading.ThreadHelper.ThreadStart()

И я обнаружил, что метод SetFocus также получит такое же исключение. Я попытался использовать метод win32 для отправки ему сообщения и обнаружил, что element.Current.NativeWindowHandle имеет значение null. но я вижу текущее значение из текущего свойства ValuePattern. Только для адреса, по которому UIA не может сначала найти элемент управления Chrome, пока я не вызову приведенный ниже метод ()UiaRegisterProviderCallback(IntPtr.Zero);

Итак, не уверен, в чем причина, и есть ли возможность установить значение для управления хромом


person Darren Tao    schedule 30.04.2012    source источник


Ответы (1)


Я не могу быть уверен в этом, не копаясь в исходном коде Chrome, но я предполагаю, что адресная строка в Chrome на самом деле является настраиваемым элементом управления, и поэтому вы не видите, что она идеально соответствует ValuePattern, как стандартное текстовое поле/ поле редактирования. Я видел, как такие вещи появляются в других местах, и обычно я прибегаю к какому-то обходному пути, используя SendKeys.

person Chaser324    schedule 30.07.2012