selenium - 如何使用 selenium Java 在 chrome print privew 页面中单击保存按钮
问题描述
我目前正在寻找一种解决方案,以使用 selenium Java 在 chrome 打印预览窗口中单击 Sava 按钮。
有什么方法可以处理 chrome 打印预览页面吗?我已经尝试过使用 Robot 类,但对于我的应用程序来说似乎并不可靠/稳定。
您能否请有人帮助我使用 selenium Java 实现这一目标。
解决方案
我在 Chrome 浏览器的打印预览页面上看不到任何“保存”按钮
这是您如何单击“取消”按钮的方法,我相信您将能够修改代码以符合您的要求:
- 首先确保使用显式等待等待预览页面可用
- 通过WebDriver.switchTo() 函数将上下文更改为打印预览窗口
打印预览页面上的所有元素都隐藏在ShadowDom中,因此您需要:
- 找到您要查找的元素的第一个父元素
- 获取其ShadowRoot属性并将结果转换为WebElement
- 使用WebElement.findElement()函数定位下一个父级
- 重复上述步骤,直到您到达所需的按钮
示例代码以防万一:
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); }
推荐阅读
- react-native - 通知 React Native
- android - 具有自定义颜色属性的 TextView 不在布局预览中呈现
- node.js - Nodejs - TypeError:logger.info 不是函数
- php - 请我需要有关如何连接电话号码并在开头添加 +234 的帮助,并且仍然用逗号与以下一个分开
- spring - 无法通过使用 kotlin 开放类构造函数来实例化 spring bean 属性
- extjs - Extjs 键盘映射不适用于 6.5.1 现代
- firebase - 将名称和电子邮件设置为 Crashlytics Firebase
- python - 根据变量和列条件创建变量 - pyspark
- angular - Angular:仅在输入 2 个以上字符时如何访问 API
- javascript - 根据值列表过滤对象数组