如何处理硒中的打印对话框?

2022-09-01 06:51:24

我必须处理打印对话框(与在浏览器中单击ctrl-p时出现的对话框相同)。我尝试了:

Alert printDialog = driver.switchTo().alert();
printDialog.dismiss();

但它不起作用。另外,我无法抓住它的窗口手柄,因为它不是窗户...

是否可以处理这些对象以及如何处理?


答案 1

不幸的是,WebDriver无法处理这些(或任何其他浏览器或操作系统对话框)。此外,它们往往在浏览器/系统/语言设置之间看起来不同,因此可能没有明确的答案。您需要检测并处理每个可能的情况,以使其在任何地方都有效。您的选项包括:

  • Robot类,它允许您以编程方式“按下”键盘上的任何内容(或盲目单击),从而通过按或来摆脱对话框。但是,如上所述,任何高级交互都取决于操作系统/语言/打印机。EnterEsc

    // press Escape programatically - the print dialog must have focus, obviously
    Robot r = new Robot();
    r.keyPress(KeyEvent.VK_ESCAPE);
    r.keyRelease(KeyEvent.VK_ESCAPE);
    
  • 自动它。它是一个Windows程序,可用于处理任何系统级自动化。与上述相同的依赖性。

或多或少就是这样。如果可以避免打印对话框,请尝试截取页面的屏幕截图并使用标准Java工具进行打印。


答案 2

一个CAN处理铬硒的打印对话框。不确定其他浏览器。

在ChromeDriver-2.17中添加了“访问打印”对话框。详细信息可以在这里找到:https://bugs.chromium.org/p/chromedriver/issues/detail?id=1087

右键单击“打印”对话框 ->检查元素”。因此,“打印的 DOM”对话框将在单独的窗口中打开。现在,您可以为对话框中的任何元素生成定位器,并在测试中使用它们。

要关闭“打印”对话框,可以执行以下操作:

//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();

推荐