栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用cssSelector清除Chrome浏览器的浏览数据时,如何与#shadow-root(打开)中的元素进行交互

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用cssSelector清除Chrome浏览器的浏览数据时,如何与#shadow-root(打开)中的元素进行交互

如果您尝试获取“清除数据”元素,则可以使用下面的js获取该元素然后执行。

return document.querySelector('settings-ui').shadowRoot.querySelector('settings-main').shadowRoot.querySelector('settings-basic-page').shadowRoot.querySelector('settings-section > settings-privacy-page').shadowRoot.querySelector('settings-clear-browsing-data-dialog').shadowRoot.querySelector('#clearBrowsingDataDialog').querySelector('#clearBrowsingData/confirm/i')

这是示例脚本。

driver.get("chrome://settings/clearBrowserData");driver.manage().window().maximize();JavascriptExecutor js = (JavascriptExecutor) driver; WebElement clearData = (WebElement) js.executescript("return document.querySelector('settings-ui').shadowRoot.querySelector('settings-main').shadowRoot.querySelector('settings-basic-page').shadowRoot.querySelector('settings-section > settings-privacy-page').shadowRoot.querySelector('settings-clear-browsing-data-dialog').shadowRoot.querySelector('#clearBrowsingDataDialog').querySelector('#clearBrowsingData/confirm/i')");// now you can click on clear data buttonclearData.click();

编辑2:解释

问题: Selenium不提供对ShadowDOM元素的明确支持,因为它们不在当前dom中。这就是为什么NoSuchElementException当尝试访问中的元素时我们将获得异常的原因shadow dom。注意:我们将参考图片中显示的术语。

解:

为了与之一起工作,shadow element我们必须找到shadow host暗影穹顶所连接的。这是基于shadowHost 获取影子根的简单方法。

private static WebElement getShadowRoot(WebDriver driver,WebElement shadowHost) {    JavascriptExecutor js = (JavascriptExecutor) driver;    return (WebElement) js.executescript("return arguments[0].shadowRoot", shadowHost);}

然后,您可以使用shadowRoot元素访问阴影树元素。

// get the shadowHost in the original dom using findElementWebElement shadowHost = driver.findElement(By.cssSelector("shadowHost_CSS"));// get the shadow rootWebElement shadowRoot = getShadowRoot(driver,shadowHost);// access shadow tree elementWebElement shadowTreeElement = shadowRoot.findElement(By.cssSelector("shadow_tree_element_css"));

为了简化上述所有步骤,创建了以下方法。

public static WebElement getShadowElement(WebDriver driver,WebElement shadowHost, String cssOfShadowElement) {    WebElement shardowRoot = getShadowRoot(driver, shadowHost);    return shardowRoot.findElement(By.cssSelector(cssOfShadowElement));}

现在您可以通过单个方法调用获取shadowTree元素

WebElement shadowHost = driver.findElement(By.cssSelector("shadowHost_CSS_Goes_here));WebElement shadowTreeElement = getShadowElement(driver,shadowHost,"shadow_tree_element_css");

并执行操作如常一样.click(),.getText()。

sh```
adowTreeElement.click()

当您只有一个级别的影子DOM时,这看起来很简单。但是在这里,在这种情况下,我们有多个级别的阴影域。因此,我们必须通过到达每个影子主机和根来访问元素。以下是使用上述方法的代码段(getShadowElement和getShadowRoot)

// Locate shadowHost on the current dom
WebElement shadowHostL1 = driver.findElement(By.cssSelector(“settings-ui”));

// now locate the shadowElement by traversing all shadow levels
WebElement shadowElementL1 = getShadowElement(driver, shadowHostL1, “settings-main”);
WebElement shadowElementL2 = getShadowElement(driver, shadowElementL1,”settings-basic-page”);
WebElement shadowElementL3 = getShadowElement(driver, shadowElementL2,”settings-section > settings-privacy-page”);
WebElement shadowElementL4 = getShadowElement(driver, shadowElementL3,”settings-clear-browsing-data-dialog”);
WebElement shadowElementL5 = getShadowElement(driver, shadowElementL4,”#clearBrowsingDataDialog”);
WebElement clearData = shadowElementL5.findElement(By.cssSelector(“#clearBrowsingData/confirm/i”));
System.out.println(clearData.getText());
clearData.click();

您可以按照答案开头所述在单个js调用中完成上述所有步骤(以下添加只是为了减少混乱)。

WebElement clearData = (WebElement) js.executescript(“return document.querySelector(‘settings-ui’).shadowRoot.querySelector(‘settings-main’).shadowRoot.querySelector(‘settings-basic-page’).shadowRoot.querySelector(‘settings-section > settings-privacy-page’).shadowRoot.querySelector(‘settings-clear-browsing-data-dialog’).shadowRoot.querySelector(‘#clearBrowsingDataDialog’).querySelector(‘#clearBrowsingData/confirm/i’)”);
```



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/575545.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号