我必须处理打印对话框(与在浏览器中单击ctrl-p时出现的对话框相同)。我尝试过:
Alert printDialog = driver.switchTo().alert();
printDialog.dismiss();
但它并没有起作用。我也不能抓住它的窗口句柄,因为它不是一个窗口...
是否可以处理这些对象以及如何处理这些对象?
发布于 2018-03-29 23:56:19
可以在Chrome中使用Selenium处理打印对话框。不确定是否使用其他浏览器。
在ChromeDriver-2.17中添加了对打印对话框的访问。详情可在此处找到:https://bugs.chromium.org/p/chromedriver/issues/detail?id=1087
右击Print对话框-> Inspect Element。因此,DOM of Print对话框将在单独的窗口中打开。现在,您可以为对话框上的任何元素生成定位器,并在测试中使用它们。
要关闭打印对话框,可以执行以下操作:
//Switch to Print dialog
Set<String> windowHandles = driver.getWindowHandles();
if (!windowHandles.isEmpty()) {
driver.switchTo().window((String) windowHandles.toArray()[windowHandles.size() - 1]);
}
//Now work with the dialog as with an ordinary page:
driver.findElement(By.className("cancel")).click();
发布于 2020-06-08 04:19:10
我能够通过添加--kiosk-printing
来解决这个问题,它完全绕过了打印对话框。我将我的默认打印设置为pdf,所以我最终在我的Downloads文件夹中得到了一个pdf,但至少selenium不会挂起。下面是代码的样子:
ChromeOptions cOptions = new ChromeOptions();
cOptions.addArguments("kiosk-printing");
RemoteWebDriver driver = new RemoteWebDriver(hostUrl, cOptions);
发布于 2014-05-07 06:20:30
Slanec的回答是正确的-- WebDriver没有这方面的原生功能。我在Windows中解决这个问题的方法是使用System.Windows.Forms.SendKeys对象:
SendKeys.SendWait("^p");
System.Threading.Thread.Sleep(500);
SendKeys.SendWait("~");
// give it a minute to spool onto the printer
System.Threading.Thread.Sleep(5000);
实际上,我已经在一个循环中打印了一堆语句。就像一种护身符。
https://stackoverflow.com/questions/11537103
复制相似问题