【问题标题】:print dialog does not let next code to be executed in selenium打印对话框不允许在 selenium 中执行下一个代码
【发布时间】:2015-05-28 23:07:58
【问题描述】:

我正在使用的代码如下。第一行点击“打印按钮”,打开“打印”对话框。一旦打开,我希望控制台输出“发送 Esc 键 - 开始”,然后是机器人、动作、警报关闭、窗口切换到发生(基于未注释的任何代码)。但是,除非我在打印对话框中单击取消,否则控制台不会打印任何内容。因此,一旦我单击取消,系统输出将打印消息,执行操作(并且没有任何有用的事情发生由于这些操作),然后打印另一个控制台消息。

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

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");

【问题讨论】:

标签: java selenium webdriver


【解决方案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

【讨论】:

    【解决方案2】:

    驱动程序永远不会返回,因为 Selenium 在内部使用 JavaScript 来“单击”按钮。单击该按钮会打开一个模式对话框,该对话框会阻止浏览器的 JavaScript 引擎(所有动画也会停止)。这部分是因为模式对话框(alert() 做同样的事情),但也因为您可能希望按原样打印页面 - 在您打印时它不应该改变。

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

    注意:这是易碎的。我的建议是不要以这种方式测试打印对话框。如果你需要这个,那么 Java+Selenium 可能不是正确的解决方案。看看像QF-Test这样的专业UI测试工具。

    相关:

    【讨论】:

    • 我检查了该页面并使用机器人发送转义键,但它不起作用。如何“找到屏幕上的按钮”然后使用机器人?
    • @MatheswaranKanagarajan:你说得对,Robot 没有 API 可以遍历屏幕上的窗口或分析浏览器菜单/工具栏的高度等内容。请参阅我的编辑以获取其他解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多