#javascript #selenium
#язык JavaScript #селен
Вопрос:
Версия селена: 4.0.0
Есть ли способ реализовать методы isDisplayed, IsEnabled, IsSelected в Selenium с использованием Java-скрипта для элементов shadow dom?
Я попробовал выполнить эти аналогичные действия ниже, но, по-видимому, не сработало. Какие-нибудь указания, пожалуйста?
Код:
public void isEnabledUsingJavaScript() { JavascriptExecutor js = (JavascriptExecutor) driver; Boolean test= (Boolean) js.executeScript("document.querySelector("foo gt;boo").shadowRoot.querySelector("foogt;boogt;span").enable()"); System.out.println(test); }
Примечание: Поскольку это dom showdow, обычные селекторы XPATH или CSS не могут быть применены.
Ошибка:-
org.openqa.selenium.JavascriptException: javascript error: document.querySelector(...).shadowRoot.querySelector(...).enable is not a function
Хотя я понимаю ошибку, я не уверен, какой подходящий метод существует в java-скрипте для использования в такого рода сценариях.
Комментарии:
1. Почему бы вам не взять переменную в качестве веб-элемента, а затем не использовать обычные методы?
2. @QualityMatters Как я уже указывал, обычный способ идентификации с помощью XPATH или CSS не будет работать из-за реализации shadow dom.
3. На каком языке вы ищете решение? Ява? как вы использовали sysout
4. @QualityMatters: Я использую как java, так и javascript для обработки shodowdom в selenium.
Ответ №1:
Вам нужно ввести variable
возвращенное значение webElement
, тогда вы сможете выполнить все операции , которые можно выполнить в a webElement
.
Для справки, ниже приведен веб-сайт (https://www.studydrive.net)
, где Accept cookie button
отображается под a shadow root
, который с помощью исполнителя java-скриптов можно извлечь со страницы и ввести на web element
нее .
driver = new ChromeDriver(); driver.get("https://www.studydrive.net/") ; driver.manage().window().maximize(); JavascriptExecutor js = (JavascriptExecutor) driver; Thread.sleep(30); WebElement element = (WebElement) js.executeScript("return document.querySelector('#usercentrics-root').shadowRoot.querySelector('#uc-center-container gt; div.sc-jcVcSv.gBDztr gt; div gt; div.sc-giImIA.jqkmtR gt; div gt; button.sc-gsTEea.ffHglG')"); if(element.isDisplayed()) { System.out.println("element is displayed"); element.click(); System.out.println("element is clicked"); } else { System.out.println("element is not visible"); }
Выход:
element is displayed element is clicked
Комментарии:
1. Я узнал от вас несколько новых вещей. Высоко ценю!!!