Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot go to "chrome://downloads/" in a newly opened tab with Selenium in Chrome

I am using Selenium and Java to write a test for Chrome browser. My problem is that somewhere in my test, I download something and it covers a web element. I need to close that download bar (I cannot scroll to the element). I searched a lot and narrowed down to this way to open the download page in a new tab:

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

It opens that new tab, but does not go to download page.

I also added this one:

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

but it didn't work either.

I tried:

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

and

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

but neither one even opened the tab.

like image 504
farmcommand2 Avatar asked Jan 12 '17 17:01

farmcommand2


1 Answers

It is because you can't open local resources programmatically. Chrome raises an error:

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

Working solution is to run Chrome with following flags:

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

But this trick doesn't work with Selenium Chrome Driver(I don't know actually why, a tried to remove all args that appears in chrome://version, but this doesn't helps).

So for me above solution is the only one that works:

C# example:

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

There is another trick if you need to open downloaded file:

JavaScript example:

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

Chrome uses Polymer and Shadow DOM so there is no easy way to query #file-link item.

Also you need to execute .click() method with JavaScript programatically because there is a custom event handler on it, which opens actual downloaded file instead of href attribute which point to url where you downloaded file from.

like image 121
Kifir Avatar answered Oct 18 '22 23:10

Kifir