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'

一直没找到原因,也没有找到可以替代的方案。

阅读 1.5k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题