t.me/atinfo_chat Telegram группа по автоматизации тестирования

Определение локаторов для item в Combobox (Selenide + Shadow DOM + Vaadin)

dom
locators
selenide
webdriver
Теги: #<Tag:0x00007f21d4bccc88> #<Tag:0x00007f21d4bccb48> #<Tag:0x00007f21d4bcca08> #<Tag:0x00007f21d4bcc8c8>

(Seva Nardin) #1

Проблема (Вопрос) заключается …
На новом проекте (написан на vaadin) не получается определить локаторы для пунктов выпадающего списка, так как они находятся в shadow-root. Есть ли возможность побороть эту проблему методами Selenide?


Я попытался сделать …

У меня получилось …

У меня не получилось …

Код

code

Логи и ошибка вот такая …

Версии ОС и софта следующие …


(asolntsev) #2

Мы думали добавить в Selenide поддерджку shadow-root, но пока неочевидно, так ли уж она нужна.

Потому, что и без всякой поддержки это легко делается через Selenide.executeJavascript():
https://www.seleniumeasy.com/selenium-tutorials/accessing-shadow-dom-elements-with-webdriver


(Seva Nardin) #3

Спасибо! Данный ресурс уже смотрел, пока не помогло, до ходит до третьего рута и робот уже не может определить элемент. Надо посмотреть предложенный метод.


(Seva Nardin) #4

а есть примеры использования executeJavascript() ?


(asolntsev) #5

Да, см. код и тесты самого селенида.


(Seva Nardin) #6

использование в Selenide метода executeJavaScript() пока не увенчались успехом. Компилятор выдает ошибку java.lang.ClassCastException: org.openqa.selenium.remote.RemoteWebElement cannot be cast to com.codeborne.selenide.SelenideElement.
Возможно что то не так делаю.

public SelenideElement expandRootElement(SelenideElement element) {
    SelenideElement ele = Selenide.executeJavaScript("return arguments[0].shadowRoot", element);
    return ele;
}

(asolntsev) #7

Это как раз легко решается.

public SelenideElement expandRootElement(SelenideElement element) {
    WebElement ele = Selenide.executeJavaScript("return arguments[0].shadowRoot", element);
    return $(ele);
}

(Seva Nardin) #8

Помогло. С начало неправильно определил первый рут, но потом разобрался. Спасибо за помощь!