Метод isDisplayed, IsEnabled, IsSelected доступен в Java-скрипте для элементов shodow dom в selenium

#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. Я узнал от вас несколько новых вещей. Высоко ценю!!!