java - 在 chrome 最新版本中使用 selenium 处理打印预览窗口
问题描述
我正在尝试使用 google chrome 版本 75.0.3770.80 中的打印对话框。我正在使用 Selenium 单击打印对话框上的取消按钮来关闭它。
可以检查取消按钮,并且它的选择器在 UI 上可见,但是当我尝试使用 selenium 单击这些选择器时,它会给出没有此类元素异常。
此外,当我为该页面使用 getSource() 时,源代码中不存在按钮选择器,但在 UI 上可见
那么,我们如何点击取消按钮,有什么办法可以做到这一点?
解决方案
这是python中的解决方案。您可以将此方法转换为 java.lang.
def cancelPrintPreview():
# get the current time and add 180 seconds to wait for the print preview cancel button
endTime = time.time() + 180
# switch to print preview window
driver.switch_to.window(driver.window_handles[-1])
while True:
try:
# get the cancel button
cancelButton = driver.execute_script(
"return document.querySelector('print-preview-app').shadowRoot.querySelector('#sidebar').shadowRoot.querySelector('print-preview-header#header').shadowRoot.querySelector('paper-button.cancel-button')")
if cancelButton:
# click on cancel
cancelButton.click()
# switch back to main window
driver.switch_to.window(driver.window_handles[0])
return True
except:
pass
time.sleep(1)
if time.time() > endTime:
driver.switch_to.window(driver.window_handles[0])
break
您可以在此处查看我的答案,以获取有关使用 shadow-root 元素的更多信息。
推荐阅读
- c++ - 全局变量在下一个循环之前不更新
- c++ - 用观察者模式(C++)中的更新请求问题淹没视图
- r - 在 R pROC 中存储多个 AUC 和 CI
- swift - 如何将字典的值约束到协议
- python-3.x - TypeError: type.__new__() 参数 2 必须是元组,而不是 str
- jquery - .ui-dialog button.ui-button.ui-state-hover .ui-button-text{color:black} 到 jquery
- tomcat - 为什么 JAX-RS @ApplicationPath 在 Tomcat 中不起作用
- python - 用更多逻辑覆盖 __eq__
- python - 在 Numpy Python 中按一个顺序格式化两个数组的排列
- java - 如何在不使用任何排序的情况下获得未排序数组中的第 N 个最大元素?这可能吗?