isDisplayed、isEnabled、isSelected方法在Java脚本中可用于selenium中的shodo



硒版本:4.0.0

有没有一种方法可以使用shadow-dom元素的Java脚本在Selenium中实现isDisplayed、isEnabled和isSelected方法?

我尝试了下面这些类似的步骤,但显然没有奏效。有什么指导吗?

代码:

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);
}

注意:由于它是showdow dom,因此无法应用通常的XPATH或CSS选择器。

错误:-

org.openqa.selenium.JavascriptException: javascript error: document.querySelector(...).shadowRoot.querySelector(...).enable is not a function

虽然我理解这个错误,但不确定在这类场景中使用java脚本中存在的合适方法。

您需要对返回给webElementvariable进行类型转换,然后您将能够执行在webElement中可以完成的所有操作。

供您参考,下面是一个网站(https://www.studydrive.net),其中Accept cookie button出现在shadow root下,在java脚本执行器的帮助下,可以从页面中提取并键入casted到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");
}

输出:

element is displayed
element is clicked

最新更新