modules/browser_object_print_preview.py (52 lines of code) (raw):

from time import sleep from selenium.common import NoAlertPresentException from selenium.webdriver.common.keys import Keys from modules.browser_object_panel_ui import PanelUi from modules.page_base import BasePage from modules.util import BrowserActions def _get_alert(d): try: alert = d.switch_to.alert except NoAlertPresentException: return False return alert class PrintPreview(BasePage): """Browser Object Model for Print Preview modal""" URL_TEMPLATE = "about:blank" def open(self) -> BasePage: """Use PanelUi to open the Print Preview, wait for element to load""" panel_ui = PanelUi(self.driver) with self.driver.context(self.driver.CONTEXT_CHROME): panel_ui.open_panel_menu() panel_ui.select_panel_setting("print-option") self.wait_for_page_to_load() return self def open_with_key_combo(self) -> BasePage: """Use Cmd/Ctrl + P to open the Print Preview, wait for load""" with self.driver.context(self.driver.CONTEXT_CHROME): if self.sys_platform() == "Darwin": mod_key = Keys.COMMAND else: mod_key = Keys.CONTROL self.perform_key_combo(mod_key, "p") self.wait_for_page_to_load() return self def switch_to_preview_window(self) -> BasePage: """Switch to the iframe holding the Print Preview""" ba = BrowserActions(self.driver) sleep(3) with self.driver.context(self.driver.CONTEXT_CHROME): ba.switch_to_iframe_context(self.get_element("print-settings-browser")) self.expect( lambda _: self.driver.execute_script( 'return document.readyState === "complete";' ) ) return self def start_print(self, secondary_confirm=True) -> BasePage: """Press Enter in Print""" from pynput.keyboard import Controller, Key self.switch_to_preview_window() with self.driver.context(self.driver.CONTEXT_CHROME): self.actions.send_keys_to_element( self.get_element("print-settings-browser"), Keys.TAB + Keys.ENTER ).perform() sleep(2) keyboard = Controller() keyboard.tap(Key.enter) return self