不能去" chrome:// downloads /"在Chrome中使用Selenium的新打开的标签页中

时间:2017-01-12 17:51:32

标签: java selenium selenium-webdriver selenium-chromedriver

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

((JavascriptExecutor) driver).executeScript("window.open('chrome://downloads/');");

它会打开新标签,但不会进入下载页面。

我还添加了这个:

driver.switchTo().window(tabs2.get(1));
driver.get("chrome://downloads/");

但它也没有用。

我试过了:

driver.findElement(By.cssSelector("Body")).sendKeys(Keys.CONTROL + "t");

action.sendKeys(Keys.CONTROL+ "j").build().perform();
action.keyUp(Keys.CONTROL).build().perform();
Thread.sleep(500);

但是没有人打开标签。

2 个答案:

答案 0 :(得分:0)

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

Not allowed to load local resource: chrome://downloads/

工作解决方案是使用以下标志运行Chrome:

--disable-web-security --user-data-dir="C:\chrome_insecure"

但是这个技巧不适用于Selenium Chrome Driver(我实际上不知道为什么,试图删除chrome://version中显示的所有参数,但这没有帮助。)

所以对我而言,解决方案是唯一有效的解决方案:

C#示例:

driver.Navigate().GoToUrl("chrome://downloads/")

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

JavaScript示例:

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

Chrome使用Polymer和Shadow DOM,因此无法轻松查询#file-link项目。

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

答案 1 :(得分:0)

我从这篇文章开始,最后给出了下面给出的解决方案。该控件可在Chrome 71中使用。首先我突出显示该控件,然后单击它。 窗口对象实际上是IWebDriver,第二个方法在第一个方法之后调用。

  internal void NavigateToDownloads()
        {
            window.Navigate().GoToUrl("chrome://downloads/");
        }
 internal void OpenFirstDownloadLinkJS()
        {
            IJavaScriptExecutor js = (IJavaScriptExecutor) window;
            js.ExecuteScript("document.getElementsByTagName('downloads-manager')[0].shadowRoot.children[4].children[0].children[1].shadowRoot.querySelectorAll('#content')[0].querySelector('#details > #title-area > #file-link').setAttribute('style', 'background: yellow;border: 2px solid red;');");
            js.ExecuteScript("document.getElementsByTagName('downloads-manager')[0].shadowRoot.children[4].children[0].children[1].shadowRoot.querySelectorAll('#content')[0].querySelector('#details > #title-area > #file-link').click();");
        }