如何处理Selenium中的打印对话框?
我必须处理打印对话框(在浏览器中单击ctrl-p时出现的对话框)。 我试着用:
Alert printDialog = driver.switchTo().alert(); printDialog.dismiss();
但它没有工作。 我也无法赶上它的窗户把手,因为这不是一个窗口…
是否有可能处理这些对象,以及如何?
不幸的是,WebDriver无法处理这些(或任何其他浏览器或操作系统对话框)。 而且,他们在浏览器/系统/语言设置上往往看起来不一样,所以可能没有明确的答案。 你需要检测和处理每一个可能的情况,以使其在任何地方都能正常工作。 您的select包括:
-
Robot
类,它允许你“按”编程方式键盘上的任何东西(或盲目点击),因此通过按下Enter或Esc来摆脱对话框。 但是,如上所述,任何高级交互都依赖于OS /语言/打印机。// press Escape programatically - the print dialog must have focus, obviously Robot r = new Robot(); r.keyPress(KeyEvent.VK_ESCAPE); r.keyRelease(KeyEvent.VK_ESCAPE);
-
AutoIt 。 这是一个Windows程序,用于处理任何系统级别的自动化。 与上述相同。
这或多或less。 如果您可以避免打印对话框,尝试采取页面的屏幕截图,并使用标准的Java工具打印。
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);
我实际上已经在一个循环中打印了一堆陈述。 奇迹般有效。
打印对话框出现后,您可以简单地closures浏览器。 毫无疑问,这是一个非常激烈的措施,但是它的好处是:
- 很简单
- 它不需要任何外部工具
- 它适用于各种操作系统和浏览器
只要打电话:
myWebDriver.quit();
通常情况下,您将运行testing,并检查页面上的元素以照常打印。 即使打印对话框打开,WebDriver也可以检查页面元素。
一旦你完成,退出浏览器(并启动一个新的下一个testing)。
我们已经在一个项目上成功地使用了它。 为了方便起见,我们编写了一个包装类来跟踪“当前的WebDriver实例”。 我有方法来检索这个实例(根据需要创build一个)并closures它。 这样,你总是可以调用getCurrentWebDriver()
并获得一个有效的实例(重用或新创build)。