Разбор приложения Angular с использованием MSHTML - PullRequest
0 голосов
/ 01 июня 2019

Я работаю над проектом, который анализирует DOM страницы на основе Angular и выводит классы объектной модели страницы, которые можно использовать с Selenium, используя следующие шаги (используя драйвер Selenium Chrome):

  1. Получить необработанный текст HTML [Driver.FindElementByTagName ("body"). GetAttribute ("outerHTML")] *
  2. Создать объект IHTMLDocument2
  3. Записать текст в объект IHTMLDocument2 [doc.Write (text)]
  4. Рекурсивно обходить DOM, начиная с корневого элемента, передавая корневой элемент пользовательской функции PopulateChildren (IHTMLElement parent)
  5. Внутри PopulateChildren, перебирайте parent.children, передавая каждый элемент PopulateChildren..

Моя проблема заключается в том, что хотя я вижу узел <APP> на вкладке "Элементы" в инструментах разработчика в Chrome и вижу, что он является потомком <body> и сам по себе имеетдети, когда это родительский элемент в моем коде, у него нет детей.Вместо этого все его дочерние элементы свисают с элемента <body>.

В Chrome я вижу следующее дерево DOM (исключая все теги скрипта):

body
 └app
   ├main-layout-header
   │ └div
   ├div
   └div

Когда я иду по DOM в коде, я получаю это:

body
 ├app
 ├main-layout-header
 ├div
 ├div
 └div

Элементы есть, просто не в нужном месте.Кажется, что MSHTML не знает, что делать с какими-то нестандартными элементами HTML.Они отображаются как базовый тип HTMLElementUnknownClass.

Есть идеи, почему он не может разместить их в правильном месте?Я, наверное, могу обойти это, но мне бы очень хотелось понять, что происходит под одеялом.

...