如何使用 Chrome Webdriver 关闭下载横幅?

How to close download banner with Chrome Webdriver?

在我的测试中,我下载了一个文件,它工作正常,但后来当我试图点击一个元素时,我无法滚动到视图中,页面底部的 chrome 下载对话框是在路上。无法将我需要单击的按钮移动到视图中,所以有没有办法使用 chrome webdriver 关闭该下载框?

您可以使用 org.openqa.selenium.interactions.Actions class 移动到元素 view:

WebElement element = driver.findElement(By.id("my-id"));
Actions actions = new Actions(driver);
actions.moveToElement(element);
// actions.click();
actions.perform();

你问题的答案:

,目前无法通过[=35=访问(并因此关闭)浏览器的下载对话框(在您的情况下chrome) ].

你可以做什么:

  • 使用浏览器开发人员工具(按 F12)确定您要单击的按钮是否有 ID 或其他方法来定位它
  • 那你就可以driver.findElement(yourLocator).click();

假设您的按钮是这样的:

<input id="my-button" class="button" type="submit" value="Click">

然后您可以按如下方式定义您的定位器:

By yourLocator = By.id("my-button");

您可以使用下面的代码片段打开您的下载网页,然后关闭它并返回到您的目标页面:

action.sendKeys(Keys.CONTROL+ "j").build().perform();
action.keyUp(Keys.CONTROL).build().perform();
Thread.sleep(500);        
ArrayList<String> tabs2 = new ArrayList<String> (driverChrome.getWindowHandles());
driverChrome.switchTo().window(tabs2.get(1));
Thread.sleep(500);
driverChrome.close();
driverChrome.switchTo().window(tabs2.get(0));
Thread.sleep(500);

发送控制键对我不起作用,但我开发了一个解决方法。我在新的window里做任何下载测试,然后关闭下载window,原来window没有下载栏。它必须是一个新的window,如果你做一个新的标签,它会转移过来,为了得到这个我使用JavaScript。切换到新的 window、运行 下载测试,然后在完成后切换到原来的 window。

string javascript = $"$(window.open('', '_blank', 'location=yes'))";

((IJavaScriptExecutor)Driver).ExecuteScript(javascript); //create new window

Driver.SwitchTo().Window(Driver.WindowHandles.Last())); //switch to new window

//do download test here

Driver.Close(); //close created window

Driver.SwitchTo().Window(Driver.WindowHandles.First()); //back to original window with no download bar