首页 > 解决方案 > 如何使用 selenium Java 在 chrome print privew 页面中单击保存按钮

问题描述

我目前正在寻找一种解决方案,以使用 selenium Java 在 chrome 打印预览窗口中单击 Sava 按钮。

有什么方法可以处理 chrome 打印预览页面吗?我已经尝试过使用 Robot 类,但对于我的应用程序来说似乎并不可靠/稳定。

您能否请有人帮助我使用 selenium Java 实现这一目标。

标签: seleniumgoogle-chromeprintingpreview

解决方案


我在 Chrome 浏览器的打印预览页面上看不到任何“保存”按钮

在此处输入图像描述

这是您如何单击“取消”按钮的方法,我相信您将能够修改代码以符合您的要求:

  1. 首先确保使用显式等待等待预览页面可用
  2. 通过WebDriver.switchTo() 函数将上下文更改为打印预览窗口
  3. 打印预览页面上的所有元素都隐藏在ShadowDom中,因此您需要:

  4. 示例代码以防万一:

    new WebDriverWait(driver, 10).until(ExpectedConditions.numberOfWindowsToBe(2));
    driver.switchTo().window(driver.getWindowHandles().stream().skip(1).findFirst().get());
    WebElement printPreviewApp = driver.findElement(By.tagName("print-preview-app"));
    WebElement printPreviewAppConten = expandShadowRoot(printPreviewApp, driver);
    WebElement printPreviewSidebar = printPreviewAppConten.findElement(By.tagName("print-preview-sidebar"));
    WebElement printPreviewSidebarContent = expandShadowRoot(printPreviewSidebar, driver);
    WebElement printPreviewHeader = printPreviewSidebarContent.findElement(By.tagName("print-preview-header"));
    WebElement printPreviewHeaderContent = expandShadowRoot(printPreviewHeader, driver);
    printPreviewHeaderContent.findElements(By.tagName("paper-button")).get(1).click();
    

    expandShadowRoot函数如下所示:

    private WebElement expandShadowRoot(WebElement parent, WebDriver driver) {
        return (WebElement) ((JavascriptExecutor) driver).executeScript("return arguments[0].shadowRoot", parent);
    }
    

推荐阅读