Находите элементы в теневой модели DOM веб-компонентов непосредственно с помощью механизма запросов CSS.
В этом документе показано, как использовать более простой CSS / xPaths, который вызывает document.querySelector
для поиска элементов в #shadow-root
ваших веб-компонентов или Salesforce LWC приложений. Это решение можно расширить до LitElements, Lighting Fast Templates и т. Д.
Желание состоит в том, чтобы найти ваши #shadow-root
элементы непосредственно через механизм запросов CSS (что вы не можете сделать с текущей реализацией WebDriver), например,
🔎 Если вы создаете свое приложение с помощью веб-компонентов или Salesforce’s LWC, и если вы попытаетесь использовать document.querySelector
(в консоли), оно ничего не найдет в документе, хотя вы видите элемент в DOM браузера. Причина в том, что элементы веб-компонента находятся не в Main DOM, а скорее в Shadow DOM.
«Щит Shadow DOM становится головной болью для разработчиков при написании автоматических тестов интеграции / компонентов / E2E для веб-компонентов».
⚠️ ПРОБЛЕМА
Shadow DOM предотвращает легкое тестирование ваших компонентов на e2e из-за того, что обычные команды Selenium не работают из-за того, что элемент фактически не находится в основном документе. Скорее они инкапсулированы в Shadow DOM.
Selenium использует querySelector для поиска элемента; Теневые DOM предотвращают это.
Механизмы выбора, такие как css/xpath
, по умолчанию не работают с теневой DOM.
Пример
Давайте посмотрим на chrome://download
страницу. Он реализует Shadow DOM. Как вы видите, #searchInput
- это элемент с ограниченной областью действия под #shadow-root (open)
, поэтому document.querySelector
команде не удается найти элемент #searchInput
,
Приведенный ниже запрос не может вернуть элемент, потому что #searchInput
инкапсулирован в Shadow Dom,
и в результате приведенная ниже команда Selenium WebDriver также не сможет найти элемент ❎
Итак, что необходимо, так это очень сложный вложенный CSS [не рекомендуется] ↓
🤔 теперь представьте, вы добавляете еще один элемент во вложенный маршрут. Тогда вы неосознанно нарушаете тесты автоматизации. Вам нужно будет отслеживать и обновлять весь существующий вложенный CSS - что очень сложно !!
Могу ли я получить поддержку от WebDriver?
да. Фреймворк Codeceptjs-BDD предоставляет готовую поддержку для удобного поиска элементов Shadow DOM. Хотя существует существующий запрос функции для поддержки в W3C / Webdriver, но с помощью Codeceptjs-BDD Framework вы можете найти такие элементы, как document.query,
I.click('.any-shadow-elements-in-dom'); // no dom hierarchy
[..] большинство сред сквозного тестирования полагаются на [..] вызовы querySelector через CSS / xPaths. Элементы в Shadow DOM нельзя выбрать ни одним из них. Но у нас есть решение на уровне структуры.
🚀 РЕШЕНИЕ
Решением является реализация Codeceptjs-BDD Webdriver 🎉 🎉 🎉 , которая обеспечивает автоматическую поддержку Shadow DOM, а Playwright уже имеет встроенную поддержку.
Давайте поговорим о реальных сценариях, построенных с помощью фреймворка CodeceptJS!
Пример. Как видно в строке №6 на гифке ниже, при тестировании CSS довольно упрощен.
✅ Как вы видите в примере ниже, вам нужно просто определить очень простой #searchInput
CSS. Драйвер Playwright найдет для вас элемент (ы). Не нужно упоминать ни о какой иерархии #shadow-roots
!
🙌 Не требуется вложенный / сложный CSS!
Просто проверьте элемент в DOM и выберите уникальный атрибут. С Драматургом все так просто, потому что Драматург делает за нас остальную сантехническую работу.
Эксклюзивная поддержка WebDriver для Shadow Dom ⬇
✅ Рамочная документация: https://gkushang.github.io/
Демо-время
Давайте посмотрим на несколько реальных примеров со сценариями
Примеры в этом документе построены на фреймворке Codeceptjs-BDD с Playwright!
Полный пример теста
Как вы видите в приведенном выше примере, #searchInput
является элементом с ограниченной областью видимости (# shadow-root), но он не требует наличия вложенного CSS #shadowRoots
, чтобы найти элемент, но он все равно находит элемент!
Объект страницы LWC Salesforce, Еще один пример
Веб-компоненты Salesforce Lighting (LWC) - еще один отличный пример теневых элементов DOM. LWC Recipes построен с использованием LWC. Ниже приведен объект страницы о том, как запрашивать элементы Shadow DOM с помощью простого CSS.
Полный пример автоматизации E2E Приложение для веб-компонентов освещения Salesforce доступен здесь:
🎉 Codeceptjs-BDD упрощает автоматизацию веб-компонентов на любом из нижеперечисленных уровней тестирования автоматизации:
- Тесты компонентов
- Интеграционные тесты
- Функциональные тесты
- Тесты E2E
⭐️ Не забудьте ознакомиться с дополнительной документацией по Веб-сайту Codeceptjs-BDD framework и библиотеке CodeceptJS, чтобы узнать о дополнительных функциях🌈!
Спасибо за чтение, надеюсь, вы открыли для себя что-то новое и полезное. Оставайтесь любопытными и счастливого кодирования!