Нужна помощь, чтобы нажать на элемент под тенью Root (закрыт) типа - PullRequest
0 голосов
/ 07 июня 2019

Исключение нулевого указателя при нажатии на элемент, расположенный внутри теневого корня (закрыт) * ​​1001 *

Пытался справиться с этим с помощью Java Script:

public WebElement getShadowRootElement(WebElement element) {
    return (WebElement)
            ((JavascriptExecutor)
                    driver).executeScript("return 
arguments[0].shadowRoot", element);
}

enter image description here

Результат:

Cannot read property 'shadowRoot' of null

Добавлены скриншоты: 1. enter image description here

enter image description here

Ответы [ 4 ]

1 голос
/ 07 июня 2019

Вы можете использовать javascript примерно так.

WebElement clearData = (WebElement) js.executeScript("return document.querySelector('button[title='Close Order Status'] svg use').shadowRoot.querySelector('svg path')");

Проверьте Как найти элементы # shadow-root (open) через ссылку cssSelector для получения дополнительной информации.

0 голосов
/ 13 июня 2019

Спасибо, supputuri за вашу помощь. Кнопка «закрыть» была закрыта после переключения из фрейма в содержимое по умолчанию.

0 голосов
/ 08 июня 2019

Если ваш сценарий использования взаимодействует с элементом <path>, который находится внутри тега <svg>, он действительно находится в пределах #shadow-root (closed).

@ hayatoito (создатель Shadow DOM) в этом комментарии четко упоминает:

Первоначальная мотивация введения замкнутого теневого дерева: "Never allow an access to a node in a closed shadow tree, via any APIs, from outside", AFAIK. Таким образом, мы не можем получить доступ к узлу во внутреннем скрытом дереве теней, которое используется в элементе <video> в Blink.

На самом деле, я спроектировал закрытое теневое дерево таким образом. Если есть способ получить доступ к узлу в закрытом теневом дереве, это следует рассматривать как ошибку спецификации.

Я думаю, что вполне нормально иметь API, разрешающий доступ на уровне приложений или расширений Chrome. Однако для обычного веб-приложения текущим соглашением является "Never allow it".

Если мы это допустили, это значит, что нам не нужно замкнутое дерево теней. Я думаю, достаточно иметь открытое теневое дерево.


Перспектива WebDriver

Недавно @AutomatedTester [Дэвид Бернс, главный специалист по бекону, Mozilla Corporation] начал обсуждение WebDriver - тестируемость веб-компонентов

В настоящее время Selenium Team открыта для принятия запросов на получение того же самого.


Outro

Здесь вы можете найти соответствующее обсуждение Как автоматизировать теневые элементы DOM с помощью селена?

0 голосов
/ 07 июня 2019

Вот решение.

WebElement closeElement = (WebElement) js.executeScript("return document.querySelector('button[title='Close Order Status'] svg use').shadowRoot.querySelector('svg path')");
closeElement.click();     

Быстрый способ найти путь

Просто предоставив скриншот, который даст представление о том, как найти путь. (К вашему сведению, этот снимок экрана предназначен для кнопки очистки данных в истории очистки Chrome) enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...