【问题标题】:How can i click on cancel button on print preview page in chrome?如何在 chrome 中单击打印预览页面上的取消按钮?
【发布时间】:2019-03-05 00:07:53
【问题描述】:

在chrome中打开打印窗口后需要点击取消按钮。

我尝试了下面的代码,但它不起作用。

driver.switchTo().window(driver.getWindowHandles().toArray()[1].toString());
JavascriptExecutor executor = (JavascriptExecutor) driver.getWebDriver();
executor.executeScript("document.querySelector(\"print-preview-app\").shadowRoot.querySelector(\"print-preview-header\").shadowRoot.querySelector(\"paper-button.cancel-button\").click();");

【问题讨论】:

    标签: java selenium google-chrome


    【解决方案1】:

    我相信目前无法使用 selenium 与打印窗口进行交互。请参阅this question 了解详细说明以及使用另一种测试工具 Robot 的可能解决方法。

    【讨论】:

      【解决方案2】:

      这超出了 Selenium 至少现在可以做的事情。 您必须改用其他方式。

      这是一个调用AutoHotkey 的简化python 实现。 您需要先安装AutoHotkey

      将以下2个文件放在一个文件夹中并运行Chrome_Print.py,然后Selenium会打开StackOverflow,等待500ms并打开Chrome Print窗口,然后等待2秒退出。

      您可以创建一个类似的 Java 实现。

      如您所见,这种方法可以以自动化方式使用,但睡眠时间是硬编码的,并且取决于特定的机器。此外,它需要在处理时始终保持窗口焦点。

      Chrome_Print.py

      from selenium import webdriver
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.chrome.options import Options
      import sys, os, psutil, win32process, win32gui, win32api, time
      
      def get_hwnds_from_pid(pid):
          def EnumWindowsProc(hwnd, hwnds):
              if win32gui.IsWindowVisible(hwnd) and win32gui.IsWindowEnabled(hwnd):
                  returned_tid, returned_pid = win32process.GetWindowThreadProcessId(hwnd)
                  if returned_pid == pid:
                      hwnds.append(hwnd)
              return True
          hwnds = []
          win32gui.EnumWindows(EnumWindowsProc, hwnds)
          return hwnds
      
      driveroptions = Options()
      driveroptions.add_argument('--incognito')
      driveroptions.add_argument('--disable-infobars')
      driveroptions.add_argument('--start-maximized')
      driver = webdriver.Chrome(options=driveroptions)
      driver.set_page_load_timeout(40)
      wait = WebDriverWait(driver, 40)
      
      driver.get("https://www.stackoverflow.com")
      wait.until(EC.presence_of_element_located((By.XPATH, '/html/body/div[@class="container"]/div[@id="content"]')), "Waiting For Content Timeout")
      
      current_python_pid = os.getpid()
      current_python_process = psutil.Process(current_python_pid)
      
      chromedriver_process_list = current_python_process.children(recursive=False)
      chromedriver_process = chromedriver_process_list[0]
      
      chrome_process_list = chromedriver_process.children(recursive=False)
      chrome_process = chrome_process_list[0]
      
      chrome_hwnd_list = get_hwnds_from_pid(chrome_process.pid)
      
      
      win32api.ShellExecute(chrome_hwnd_list[0], 'open', "ChromePage_Print.ahk", str(chrome_hwnd_list[0]), os.getcwd(), 1)
      time.sleep(4)
      driver.quit()
      
      

      ChromePage_Print.ahk

      #NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
      ; #Warn  ; Enable warnings to assist with detecting common errors.
      SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
      SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
      
      
      Chrome_HWND = %1%
      
      WinActivate, ahk_id %Chrome_HWND%
      
      Sleep, 500
      SendInput ^p
      Sleep, 2000
      SendInput {Esc}
      Sleep, 800
      
      

      【讨论】:

        【解决方案3】:

        我们现在正在测试中这样做,这里唯一的大警告是此面板的 HTML 似乎经常更改,因此请注意这一点。 Version 75.0.3770.100 (Official Build) (64-bit) 所需的代码在这里:

        executor.executeScript(
          "document" 
          + ".querySelector('print-preview-app')
          + ".shadowRoot"
          + ".querySelector('print-preview-sidebar')
          + ".shadowRoot"
          + ".querySelector('print-preview-header')
          + ".shadowRoot"
          + ".querySelector('.cancel-button')
          + ".click();"
        );
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-10-11
          • 2015-07-06
          • 2020-01-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多