blob: 9dd13cdbc5dc89f04454021b40bd4e134b02d309 [file] [log] [blame]
from autotest_lib.client.common_lib import error
from autotest_lib.client.common_lib import ui_utils
from autotest_lib.client.cros.input_playback import keyboard
class UI_Helper_Handler(object):
def __init__(self, ui_handler=None, chrome=None):
"""ui_handler or chrome must be provided. ui_handler is an already
existing ui object."""
if not self.ui_handler and chrome:
self.ui = ui_utils.UI_Handler()
self.ui.start_ui_root(chrome)
elif not chrome and ui_handler:
self.ui = ui_handler
else:
raise error.TestError(
"Either the chrome object or ui_handler must be provided.")
self._keyboard = None
def print_to_custom_printer(self, printer_name, isPDF=False):
"""Open the printer menu, select the printer given and click print."""
self.open_printer_menu()
self.open_see_more_print_sub_menu()
self.select_printer_from_see_more_menu(printer_name)
self.wait_for_print_ready()
self.click_print(isPDF)
if self._keyboard:
self._keyboard.close()
def open_printer_menu(self):
self.ui.doDefault_on_obj('Chrome')
self.ui.wait_for_ui_obj('/Print/', role='menuItem', isRegex=True)
self.ui.doDefault_on_obj('/Print/', isRegex=True)
self.wait_for_print_ready()
def wait_for_print_ready(self):
self.ui.wait_for_ui_obj('Fit to width', role='button')
self.ui.wait_for_ui_obj('Loading preview', remove=True)
def open_see_more_print_sub_menu(self):
"""For now must pivot there with the KB."""
if not self.is_print_menu_open():
raise error.TestError(
"Cannot open See more print menu when print screen not open")
if not self._keyboard:
self._keyboard = keyboard.Keyboard()
for i in range(4):
self._keyboard.press_key('tab')
self._keyboard.press_key('down')
self._keyboard.press_key('enter')
def select_printer_from_see_more_menu(self, printer_name):
"""Click a printer from the "see more" sub menu within print page."""
if not self.is_see_more_menu_open():
raise error.TestError(
"Cannot select printer from sub menu as its not open.")
self.ui.wait_for_ui_obj(printer_name, role='cell')
self.ui.doDefault_on_obj(printer_name, role='cell')
self.ui.wait_for_ui_obj(printer_name, role='cell', remove=True)
# Wait for the "Setting up " loading icon to finish
self.ui.wait_for_ui_obj('Setting up ', remove=True)
def click_print(self, isPDF=False):
"""Click the print button. Click save if PDF."""
if not self.is_print_menu_open():
raise error.TestError(
"Cannot open See more print menu when print screen not open")
self.ui.doDefault_on_obj('Save' if isPDF else 'Print', role='button')
if isPDF:
pass # TODO implement the save menu
def is_see_more_menu_open(self):
"""Return True if the print menu is open."""
try:
self.ui.wait_for_ui_obj("Select a destination", role="dialog")
except error.TestError:
return False
return True
def is_print_menu_open(self):
"""Return True if the print menu is open."""
return self.ui.item_present("Print", role="window")