【问题标题】:How to click on save button in chrome print privew page using selenium Java如何使用 selenium Java 在 chrome 打印预览页面中单击保存按钮
【发布时间】:2019-08-09 21:40:49
【问题描述】:
我目前正在寻找使用 selenium Java 在 chrome 打印预览窗口中单击 Sava 按钮的解决方案。
有什么方法可以处理 chrome 打印预览页面吗?
我已经尝试过使用 Robot 类,但它对我的应用程序来说似乎并不可靠/稳定。
请有人帮我用 selenium Java 实现这个目标。
【问题讨论】:
-
-
请参阅:How do I do X? SO 的期望是,提出问题的用户不仅会进行研究以回答他们自己的问题,还会分享研究、代码尝试和结果。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案!另见:How to Ask
标签:
selenium
google-chrome
printing
preview
【解决方案1】:
我在 Chrome 浏览器的打印预览页面上看不到任何“保存”按钮
这里是点击“取消”按钮的方法,我相信您将能够修改代码以符合您的要求:
- 首先确保使用Explicit Wait 等待预览页面可用
- 通过WebDriver.switchTo() function将上下文更改为打印预览窗口
-
打印预览页面上的所有元素都隐藏在ShadowDom 中,因此您需要:
-
示例代码以防万一:
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);
}
【解决方案2】:
保存按钮不起作用,因为页面不是网页的一部分。 selenium 仅支持基于 Web 的应用程序。
但是您可以使用 SIKULI 来处理上述情况。