zor*_*b76 26 java selenium webdriver
我必须处理打印对话框(在浏览器中单击ctrl-p时出现的对话框).我尝试过:
Alert printDialog = driver.switchTo().alert();
printDialog.dismiss();
Run Code Online (Sandbox Code Playgroud)
但它不起作用.另外,我无法抓住它的窗口把手,因为它不是一个窗口......
是否可以处理这些对象以及如何处理?
Pet*_*ček 24
不幸的是,WebDriver无法处理这些(或任何其他浏览器或操作系统对话框).此外,它们在浏览器/系统/语言设置方面往往看起来不同,所以可能没有明确的答案.您需要检测并处理每种可能的情况,以使其在任何地方都能正常工作.您的选择包括:
这个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);
Run Code Online (Sandbox Code Playgroud)AutoIt.它是一个Windows程序,可用于处理任何系统级自动化.与上述相同.
这或多或少都是.如果您可以避免打印对话框,请尝试获取页面的屏幕截图并使用标准Java工具进行打印.
小智 6
一个可以处理Chrome中Selenium的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();
Run Code Online (Sandbox Code Playgroud)
我能够通过添加--kiosk-printing完全绕过打印对话框来解决此问题。我将默认打印设置为 pdf,因此我的下载文件夹中最终有一个 pdf,但至少 selenium 不会挂起。代码如下所示:
ChromeOptions cOptions = new ChromeOptions();
cOptions.addArguments("kiosk-printing");
RemoteWebDriver driver = new RemoteWebDriver(hostUrl, cOptions);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28810 次 |
| 最近记录: |