我正在使用Selenium和Java编写Chrome浏览器的测试。我的问题是在测试的某个地方,我下载了一些东西,它覆盖了一个网页元素。我需要关闭那个下载栏(我不能滚动到元素)。我搜索了很多,并缩小到这样一种方式,在一个新的标签中打开下载页面:
((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);
但他们都没开账单。
3条答案
按热度按时间fzsnzjdm1#
这是因为您无法以编程方式打开本地资源。Chrome会引发一个错误:
有效的解决方案是使用以下标志运行Chrome:
但是这个技巧不适用于Selenium Chrome驱动程序(我不知道为什么,a试图删除
chrome://version
中出现的所有参数,但这没有帮助)。因此,对我来说,上面的解决方案是唯一的工作:
C#示例:
如果您需要打开下载的文件,还有另一个技巧:
JavaScript示例:
Chrome使用Polymer和Shadow DOM,因此查询
#file-link
项目并不容易。您还需要使用JavaScript编程执行
.click()
方法,因为它有一个自定义事件处理程序,它打开实际下载的文件,而不是href
属性,该属性指向您下载文件的URL。kmb7vmvb2#
我从这篇文章开始,最后给出了下面的解决方案。这个解决方案在Chrome 71中有效。首先我突出显示了控件,然后点击了它。窗口对象实际上是IWebDriver,第二个方法在第一个方法之后调用。
2ledvvac3#
使用下面的代码(我用Python写的,但只要稍加修改,它也可以用Java写):