以chrome为例
获取下载的文件名并且判断是否下载完成
在打开download manager窗口后虽然发现页面是HTML元素,但是直接操作会获取不到元素。这是因为元素是被包含在shadow dom中。
例如
图中#shadow-root (open) 即表示该层以下的元素存在与shadow dom中,selenium并能直接访问
解决方法,首先要根据自己需要了解需要定位的元素的层级关系
private WebElement extendShadowDom (WebElement element) { WebElement shadowRoot = (WebElement) driver.executeScript("return arguments[0].shadowRoot", element); return shadowRoot; }
上面的方法可以获将shadow dom中的元素显现出来这样就可以用selenium进行定位了
如此以来,获取下载文件信息就可以这样实现
private void verifyDownloadPDF() throws InterruptedException { WebElement downloadManagerShadow = driver.findElementByTagName("downloads-manager"); WebElement downloadManager = extendShadowDom(downloadManagerShadow); WebElement downloadListShadow = downloadManager.findElement(By.cssSelector("#downloadsList > downloads-item")); WebElement downloadList = extendShadowDom(downloadListShadow); WebElement downloadDesc = downloadList.findElement(By.cssSelector("#description")); }
一层一层找下来就OK啦。