print对话框不允许在selenium中执行下一个代码

时间:2015-03-25 10:21:29

标签: java selenium webdriver

我正在使用的代码如下。第一行点击' PrintButton"打开"打印"对话。一旦打开,我希望控制台输出"发送Esc键 - 开始"然后随后执行一个动作,如机器人,动作,警报解除,窗口切换(基于取消注释的任何代码)。但相反,控制台不打印任何东西,除非我点击打印对话框中的取消。因此,一旦我点击取消,sysout就会输出消息,执行操作(并且由于这些操作没有任何用处),然后打印另一个控制台消息。

我的问题分为两部分。一个。为什么编译器(或程序)没有移动到下一行?湾我该如何处理这个打印对话框? (阅读互联网上的所有文章,尝试了建议的方法但没有任何效果)。

driver.findElement(By.id("PrintButton")).click();
System.out.println("Sending Esc key - Start");
/*Robot r = new Robot();
r.delay(10000);
r.keyPress(KeyEvent.VK_ESCAPE);
r.keyPress(KeyEvent.VK_ESCAPE);
r.keyPress(KeyEvent.VK_ESCAPE);
*/
/*Actions a = new Actions(driver).sendKeys(Keys.CANCEL);*/
/*driver.switchTo().alert().dismiss();*/
/*List<String> handles = new ArrayList<>(driver.getWindowHandles());
driver.switchTo().window(handles.get(handles.size()-1));*/
System.out.println("Sending Esc key - done");

2 个答案:

答案 0 :(得分:1)

我在ChromeDriver上遇到了同样的问题,发现唯一的方法是以异步方式点击带有JavascriptExecutor的打印按钮。

WebElelement print_button = driver.findElement(By.id("PrintButton"));
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("var elem=arguments[0]; setTimeout(function() {elem.click();}, 100)", print_button);

this tread启发

答案 1 :(得分:0)

驱动程序永远不会返回,因为Selenium在内部使用JavaScript来点击&#34;按钮。单击该按钮将打开一个模式对话框,阻止浏览器的JavaScript引擎(所有动画也会停止)。这部分是因为模态对话框(alert()执行相同的操作),但也因为您可能希望按原样打印页面 - 在打印时不应该更改。

解决方法:确保元素具有焦点(使用Selenium)。然后使用Robot来驱动整个过程:发送按键以激活按钮(很难找到屏幕上的按钮)。然后应该显示打印对话框,它应该具有焦点。然后按Robot中的下一个按键应该驱动对话框。

注意:这很脆弱。我的建议是不要这样测试打印对话框。如果需要,那么Java + Selenium可能不是正确的解决方案。查看专业的UI测试工具,如QF-Test

相关: