如何告诉Selenium在打印弹出窗口上按取消?

J. *_*Doe 4 java selenium selenium-webdriver

我正在检查是否使用Selenium显示页面.但是,当我单击该页面时,会出现打印机打印提示(如选择打印机等的窗口).如何通过点击取消让Selenium关闭此窗口?

我试图寻找警报,但似乎那些不起作用,因为打印窗口是系统提示.它无法识别出现的任何警报.

我尝试使用的最新版本只是发送像tab这样的键并输入以便选择取消按钮,但是,它不能识别任何键被按下.

我该如何处理这个案子?

public static boolean printButton() throws Exception {

    WebDriver driver = new FirefoxDriver();
    driver.get("website");


    try {

        Thread.sleep(3000);
        WebElement temp = driver.findElement(By.xpath("//*[@id='block-print-ui-print-links']/div/span/a"));
        temp.click();
        Actions action = new Actions(driver); 
        action.sendKeys(Keys.TAB).sendKeys(Keys.ENTER);

        Thread.sleep(6000);

     }

     catch (Exception e) {

        System.out.println("No button.");
        driver.close();
        return false;

     }  
Run Code Online (Sandbox Code Playgroud)

Flo*_* B. 11

我只需通过覆盖print方法来禁用打印对话框:

((JavascriptExecutor)driver).executeScript("window.print=function(){};");
Run Code Online (Sandbox Code Playgroud)

但如果您的目标是测试打印是否被调用,那么:

// get the print button
WebElement print_button = driver.findElement(By.cssSelector("..."));

// click on the print button and wait for print to be called
driver.manage().timeouts().setScriptTimeout(20, TimeUnit.SECONDS);
((JavascriptExecutor)driver).executeAsyncScript(
    "var callback = arguments[1];" +
    "window.print = function(){callback();};" +
    "arguments[0].click();"
    , print_button);
Run Code Online (Sandbox Code Playgroud)


Erç*_*çay 8

如果您只想测试 Chrome 浏览器,这里是我的解决方案。由于“机器人”类或禁用打印对我的情况不起作用。

// Choosing the second window which is the print dialog.
// Switching to opened window of print dialog.
driver.switchTo().window(driver.getWindowHandles().toArray()[1].toString());

// Runs javascript code for cancelling print operation.
// This code only executes for Chrome browsers.
JavascriptExecutor executor = (JavascriptExecutor) driver.getWebDriver();
executor.executeScript("document.getElementsByClassName('cancel')[0].click();");

// Switches to main window after print dialog operation.
driver.switchTo().window(driver.getWindowHandles().toArray()[0].toString());
Run Code Online (Sandbox Code Playgroud)

编辑:在 Chrome 71 中,这似乎不再起作用,因为脚本找不到“取消”按钮。我可以通过将行更改为:

executor.executeScript("document.querySelector(\"print-preview-app\").shadowRoot.querySelector(\"print-preview-header\").shadowRoot.querySelector(\"paper-button.cancel-button\").click();");
Run Code Online (Sandbox Code Playgroud)

  • 在 chrome 79 中,这是打印对话框中取消按钮的定位器: return document.querySelector('print-preview-app').shadowRoot.querySelector('print-preview-sidebar').shadowRoot.querySelector('print -preview-button-strip').shadowRoot.querySelector('cr-button.cancel-button') (2认同)