Selenium 操作 Chrome 浏览器中 shadow-root 标签,进行标签转换是报错?
说明
使用JAVA selenium操作chrome浏览器的shadow-root标签时,在chrome浏览器87版本之前,都可以将shadow-root下的内容转换成一个WebElement之后进行后续操作,但是今天发现在103版本上不能操作了。报强转异常。代码如下
chrome浏览器87之前版本
例如:我们操作的地址如下。 chrome://settings/clearBrowserData
浏览器清理cookies以及缓存的页面
ChromeDriver driver = new ChromeDriver();
// 打开当前网址
driver.get("chrome://settings/clearBrowserData");
// 获取 settings-ui 标签 - settings-ui标签下面第一个就是 shadow-root 元素
WebElement settingsUI = driver.findElement(By.tagName("settings-ui"));
// 调用公共方法将 shadow-root 元素转换成 WebElement 元素
WebElement shadowSettingUI = expandRootElement(driver, settingsUI);
// 后面就可以继续根据 shadowSettingUI 进行查找元素和操作元素了
WebElement container = shadowSettingUI.findElement(By.id("container"));
公共方法,将shadow-root元素转换成WebElement元素的方法
private static WebElement expandRootElement(ChromeDriver driver, WebElement element) { return (WebElement) driver.executeScript("return arguments[0].shadowRoot", element);
}
上面的代码,在chrome的87版本之前都是可以正常使用的,但是现在103.0.5060.114 (正式版本) (64 位) (cohort: Stable) 版本上报错。错误信息如下。
Exception in thread "main" java.lang.ClassCastException: com.google.common.collect.Maps$TransformedEntriesMap cannot be cast to org.openqa.selenium.WebElement at com.rhy.autoplay.driver.DriverUtils.expandRootElement(DriverUtils.java:260)
at com.rhy.autoplay.driver.DriverUtils.clearDriverCookiesV103(DriverUtils.java:445)
Disconnected from the target VM, address: '127.0.0.1:11174', transport: 'socket'
一直没找到原因,也没有找到可以替代的方案。
以上是 Selenium 操作 Chrome 浏览器中 shadow-root 标签,进行标签转换是报错? 的全部内容, 来源链接: utcz.com/p/944589.html