Versión de selenio: 4.0.0
¿Hay alguna manera de implementar los métodos isDisplayed, isEnabled, isSelected en Selenium usando el script Java para los elementos shadow dom?
Intenté estos pasos similares a continuación, pero aparentemente no funcionó. ¿Alguna orientación por favor?
Código:
public void isEnabledUsingJavaScript() { JavascriptExecutor js = (JavascriptExecutor) driver; Boolean test= (Boolean) js.executeScript("document.querySelector("foo >boo").shadowRoot.querySelector("foo>boo>span").enable()"); System.out.println(test); }Nota: Dado que es un showdow dom , no se pueden aplicar los selectores habituales de XPATH o CSS.
Error:-
org.openqa.selenium.JavascriptException: javascript error: document.querySelector(...).shadowRoot.querySelector(...).enable is not a functionSi bien entiendo el error, no estoy seguro de qué método apropiado existe en el script de Java para usar en este tipo de escenarios.
Debe encasillar la variable devuelta a webElement , luego podrá realizar todas las operaciones que se pueden realizar en un webElement .
Para su referencia, a continuación hay un sitio web (https://www.studydrive.net) , donde aparece el Accept cookie button debajo de una shadow root , que con la ayuda del ejecutor de scripts de Java, puede obtenerse de la página y escribirse en 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 > div.sc-jcVcSv.gBDztr > div > div.sc-giImIA.jqkmtR > div > 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"); }Producción:
element is displayed element is clicked