Java 不能转到“中”;chrome://downloads/" 在一个新打开的选项卡中,铬中含有硒
我正在使用Selenium和Java为Chrome浏览器编写一个测试。我的问题是,在测试的某个地方,我下载了一些东西,它覆盖了一个web元素。我需要关闭下载栏(我无法滚动到元素)。我搜索了很多,缩小了搜索范围,在新选项卡中打开下载页面: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
((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();");
}