【问题标题】:Handle Print Preview window using selenium in chrome latest version在 chrome 最新版本中使用 selenium 处理打印预览窗口
【发布时间】:2019-06-12 12:29:03
【问题描述】:

我正在尝试使用 google chrome 版本 75.0.3770.80 中的打印对话框。 我正在单击打印对话框上的取消按钮,使用 Selenium 将其关闭。

可以检查取消按钮,并且它的选择器在 UI 上是可见的,但是当我尝试使用 selenium 单击这些选择器时,它会给出没有此类元素异常。

另外,当我为该页面使用 getSource() 时,源代码中不存在按钮选择器,但在 UI 上可见

那么,我们如何点击取消按钮,有什么办法可以做到这一点?

【问题讨论】:

  • 嗨!请在您的问题中包含您已经尝试过的最小但完整的代码示例。

标签: java selenium google-chrome


【解决方案1】:

这是python中的解决方案。您可以将此方法转换为 java。

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

您可以查看我的回答 here,了解有关使用 shadow-root 元素的更多信息。

【讨论】:

  • 当您只需要禁用 window.print() JavaScript 功能时,为什么还要这样做?
【解决方案2】:

答案太多了,太复杂了。这是一个更好的:

您需要在这里做的基本上是获取触发打印弹出/对话框的默认 JavaScript 函数并将其分配给一个空函数:

window.print = "function(){};"

以上是您在 Python 中的操作方式。尝试将其翻译成 Java。

【讨论】:

  • 请问有C#版本吗?
猜你喜欢
  • 2016-03-16
  • 2014-09-04
  • 1970-01-01
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多