Как получить доступ к модели DOM через автоматизацию пользовательского интерфейса

Я использую UI Automation Framework (https://docs.microsoft.com/en-us/dotnet/framework/ui-automation/ui-automation-overview) напрямую и из библиотеки FlaUI.

Когда я пытаюсь получить доступ к содержимому окна веб-браузера (например, Chrome), я могу получить структуру AutomationElements и получить доступ к элементам веб-страницы из дерева фреймворка. Проблема в том, что доступ к элементам веб-страницы слишком медленный для автоматизации пользовательского интерфейса из-за размера дерева.

Сейчас я использую такой подход:

...
Automation.AddAutomationFocusChangedEventHandler(OnFocusChangedHandler);
...
this._application = FlaUI.Core.Application.Attach(this.ProcessId);
this._automation = new UIA3Automation();
...
private void OnFocusChangedHandler(AutomationElement elementFocused)
{
   ... 
   var mainWindow =  this._application.GetMainWindow(this._automation, TimeSpan.FromSeconds(5));
   var document = this._mainWindow?.FindFirstChild(p => 
        p.ByControlType(FlaUI.Core.Definitions.ControlType.Document));
   var someElementOnPage = document.FindAllDescendants(cf =>                        
       cf.ByControlType(FlaUI.Core.Definitions.ControlType.ListItem).And(cf.ByName("SomeName")));
   // here I have about 40-50 seconds running query
   
}

Есть ли какой-нибудь правильный способ доступа к содержимому веб-страницы из настольного приложения?

Ограничения: мне нужно получить доступ к экземпляру браузера, открытому пользователем, и я не могу изменять настройки браузера и сети.

0 ответов

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