无法在 Chrome 中使用 Selenium 的新打开的选项卡中转到“chrome://downloads/”

far*_*nd2 6 java selenium selenium-chromedriver selenium-webdriver

我正在使用 Selenium 和 Java 为 Chrome 浏览器编写测试。我的问题是在我测试的某个地方,我下载了一些东西,它涵盖了一个网络元素。我需要关闭该下载栏(我无法滚动到该元素)。我搜索了很多并缩小到这种方式以在新选项卡中打开下载页面:

((JavascriptExecutor) driver).executeScript("window.open('chrome://downloads/');");
Run Code Online (Sandbox Code Playgroud)

它会打开那个新选项卡,但不会转到下载页面。

我还添加了这个:

driver.switchTo().window(tabs2.get(1));
driver.get("chrome://downloads/");
Run Code Online (Sandbox Code Playgroud)

但它也不起作用。

我试过:

driver.findElement(By.cssSelector("Body")).sendKeys(Keys.CONTROL + "t");
Run Code Online (Sandbox Code Playgroud)

action.sendKeys(Keys.CONTROL+ "j").build().perform();
action.keyUp(Keys.CONTROL).build().perform();
Thread.sleep(500);
Run Code Online (Sandbox Code Playgroud)

但谁也没有打开标签。

Ale*_*nov 1

这是因为您无法以编程方式打开本地资源。Chrome 会引发错误:

Not allowed to load local resource: chrome://downloads/
Run Code Online (Sandbox Code Playgroud)

可行的解决方案是使用以下标志运行 Chrome:

--disable-web-security --user-data-dir="C:\chrome_insecure"
Run Code Online (Sandbox Code Playgroud)

但这个技巧不适用于 Selenium Chrome 驱动程序(我实际上不知道为什么,尝试删除出现在 中的所有参数chrome://version,但这没有帮助)。

所以对我来说,上述解决方案是唯一有效的解决方案:

C# 示例:

driver.Navigate().GoToUrl("chrome://downloads/")
Run Code Online (Sandbox Code Playgroud)

如果您需要打开下载的文件,还有另一个技巧:

JavaScript 示例:

document.getElementsByTagName("downloads-manager")[0].shadowRoot.children["downloads-list"]._physicalItems[0].content.querySelectorAll("#file-link")[0].click()
Run Code Online (Sandbox Code Playgroud)

Chrome 使用 Polymer 和 Shadow DOM,因此没有简单的方法来查询#file-link项目。

此外,您还需要.click()以编程方式使用 JavaScript 执行方法,因为它有一个自定义事件处理程序,它会打开实际下载的文件,而不是href指向您下载文件的 url 的属性。