Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不能转到“中”;chrome://downloads/" 在一个新打开的选项卡中,铬中含有硒_Java_Selenium_Selenium Webdriver_Selenium Chromedriver - Fatal编程技术网

Java 不能转到“中”;chrome://downloads/" 在一个新打开的选项卡中,铬中含有硒

Java 不能转到“中”;chrome://downloads/" 在一个新打开的选项卡中,铬中含有硒,java,selenium,selenium-webdriver,selenium-chromedriver,Java,Selenium,Selenium Webdriver,Selenium Chromedriver,我正在使用Selenium和Java为Chrome浏览器编写一个测试。我的问题是,在测试的某个地方,我下载了一些东西,它覆盖了一个web元素。我需要关闭下载栏(我无法滚动到元素)。我搜索了很多,缩小了搜索范围,在新选项卡中打开下载页面: ((JavascriptExecutor) driver).executeScript("window.open('chrome://downloads/');"); 它将打开新选项卡,但不会转到下载页面 我还加了一句: driver.switchTo().w

我正在使用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");


但两个人都没有打开该选项卡。

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

Not allowed to load local resource: chrome://downloads/
工作解决方案是使用以下标志运行Chrome:

--disable-web-security --user-data-dir="C:\chrome_insecure"
但是这个技巧对Selenium Chrome驱动程序不起作用(我不知道为什么,a试图删除
中出现的所有参数)chrome://version
,但这没有帮助)

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

C#示例:

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

JavaScript示例:

document.getElementsByTagName("downloads-manager")[0].shadowRoot.children["downloads-list"]._physicalItems[0].content.querySelectorAll("#file-link")[0].click()
Chrome使用聚合和阴影DOM,因此无法轻松查询
#文件链接


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

我从这篇文章开始,最后得到了下面给出的解决方案。这个在Chrome71中工作。首先我突出显示控件,然后单击它。 窗口对象实际上是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();");
        }
document.getElementsByTagName("downloads-manager")[0].shadowRoot.children["downloads-list"]._physicalItems[0].content.querySelectorAll("#file-link")[0].click()
  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();");
        }