class Views(object): SHOW_COLUMNS = Pattern('viewColumns.png') class ShowColumns(object): NAME = Pattern('menucol_placesContentTitle.png') TAGS = Pattern('menucol_placesContentTags.png') LOCATION = Pattern('menucol_placesContentUrl.png') MOST_RECENT_VISIT = Pattern('menucol_placesContentDate.png') VISIT_COUNT = Pattern('menucol_placesContentVisitCount.png') ADDED = Pattern('menucol_placesContentDateAdded.png') LAST_MODIFIED = Pattern('menucol_placesContentLastModified.png') SORT = Pattern('viewSort.png') class Sort(object): UNSORTED = Pattern('viewUnsorted.png') SORT_BY_NAME = Pattern('sort_by_menucol_placesContentTitle.png') SORT_BY_TAGS = Pattern('sort_by_menucol_placesContentTags.png') SORT_BY_LOCATION = Pattern('sort_by_menucol_placesContentUrl.png') SORT_BY_MOST_RECENT_VISIT = Pattern( 'sort_by_menucol_placesContentDate.png') SORT_BY_VISIT_COUNT = Pattern( 'sort_by_menucol_placesContentVisitCount.png') SORT_BY_ADDED = Pattern( 'sort_by_menucol_placesContentDateAdded.png') SORT_BY_LAST_MODIFIED = Pattern( 'sort_by_menucol_placesContentLastModified.png') AZ_SORT_ORDER = Pattern('viewSortAscending.png') ZA_SORT_ORDER = Pattern('viewSortDescending.png')
class Utils(object): # Checkbox. CHECKEDBOX = Pattern('checked_box.png') UNCHECKEDBOX = Pattern('unchecked_box.png') # Back Arrow. LIBRARY_BACK_BUTTON = Pattern('subview_button_back.png')
class Downloads(object): SHOW_DOWNLOADS_FOLDER = Pattern( 'appMenu-library-downloads-show-button_show_downloads_folder.png') PANEL_HEADER_DOWNLOADS = Pattern('panel_header_downloads.png') SHOW_ALL_DOWNLOADS = Pattern('library_menu_downloads_more.png') FILE_MOVED_OR_MISSING = Pattern('file_moved_or_missing.png') EXTRA_SMALL_FILE_5MB_ZIP = Pattern('5MB_zip.png')
class Exceptions(object): EXCEPTIONS_CONTENT_BLOCKING_LABEL = Pattern( 'exceptions_content_blocking_label.png') REMOVE_WEBSITE_BUTTON = Pattern( 'remove_website_removePermission_button.png') SAVE_CHANGES_BUTTON = Pattern( 'save_changes_btnApplyChanges_button.png')
def maximize_window(): """Maximize the browser window to fill the screen. This is NOT Full Screen mode. """ if Settings.is_mac(): # There is no keyboard shortcut for this on Mac. We'll do it the old fashioned way. # This image is of the three window control buttons at top left of the window. # We have to resize the window to ensure maximize works properly in all cases. window_controls_pattern = Pattern('window_controls.png') controls_location = find(window_controls_pattern) xcoord = controls_location.x ycoord = controls_location.y width, height = window_controls_pattern.get_size() drag_start = Location(xcoord + 70, ycoord + 5) drag_end = Location(xcoord + 75, ycoord + 5) drag_drop(drag_start, drag_end, 0.1) # Alt key changes maximize button from full screen to maximize window. maximize_button = window_controls_pattern.target_offset( width - 3, height / 2) key_down(Key.ALT) click(maximize_button) key_up(Key.ALT) elif Settings.is_windows(): type(text=Key.UP, modifier=KeyModifier.WIN) else: type(text=Key.UP, modifier=KeyModifier.CTRL + KeyModifier.META) # Wait to allow window to be maximized. time.sleep(Settings.UI_DELAY)
class AboutPreferences(object): PRIVACY_AND_SECURITY_BUTTON_SELECTED = Pattern( 'category-privacy_button_selected.png') PRIVACY_AND_SECURITY_BUTTON_NOT_SELECTED = Pattern( 'category-privacy_button_not_selected.png') class Privacy(object): CONTENT_TRACKING_TRACKERS_CHECKBOX_SELECTED = \ Pattern('contentBlockingTrackingProtectionCheckbox_checkbox_selected.png') CONTENT_TRACKING_TRACKERS_CHECKBOX_NOT_SELECTED = \ Pattern('contentBlockingTrackingProtectionCheckbox_checkbox_not_selected.png') CONTENT_TRACKING_TRACKERS_ALWAYS_RADIO_SELECTED = \ Pattern('content-blocking-tracking-protection-option-always_radio_selected.png') CONTENT_TRACKING_TRACKERS_ALWAYS_RADIO_NOT_SELECTED \ = Pattern('content-blocking-tracking-protection-option-always_radio_not_selected.png') CONTENT_TRACKING_TRACKERS_ONLY_PRIVATE_WINDOWS_RADIO_SELECTED = \ Pattern('content-blocking-tracking-protection-option-private_radio_selected.png') CONTENT_TRACKING_TRACKERS_ONLY_PRIVATE_WINDOWS_RADIO_NOT_SELECTED = \ Pattern('content-blocking-tracking-protection-option-private_radio_not_selected.png') TRACKING_PROTECTION_EXCEPTIONS_BUTTON = Pattern( 'trackingProtectionExceptions_button.png') class Exceptions(object): EXCEPTIONS_CONTENT_BLOCKING_LABEL = Pattern( 'exceptions_content_blocking_label.png') REMOVE_WEBSITE_BUTTON = Pattern( 'remove_website_removePermission_button.png') SAVE_CHANGES_BUTTON = Pattern( 'save_changes_btnApplyChanges_button.png')
def maximize_window(): """Maximize the browser window to fill the screen This is NOT Full Screen mode. """ if Settings.isMac(): # There is no keyboard shortcut for this on Mac. We'll do it the old fashioned way. # This image is of the three window control buttons at top left of the window. maximized_browser_image = 'maximized_browser.png' maximized_browser_pattern = Pattern(maximized_browser_image) maximized_browser_width, maximized_browser_height = get_image_size( maximized_browser_pattern) region = Region(0, 0, maximized_browser_width + 50, maximized_browser_height + 50) try: region.find(maximized_browser_image, 0.95) logger.debug('Window is already maximized.') except (FindError, ValueError): logger.debug('Window is not maximized.') window_controls_pattern = Pattern('window_controls.png') width, height = get_image_size(window_controls_pattern) maximize_button = window_controls_pattern.targetOffset( width - 10, height / 2) # Alt key changes maximize button from full screen to maximize window. keyDown(Key.ALT) click(maximize_button) keyUp(Key.ALT) elif Settings.isWindows(): type(text=Key.UP, modifier=KeyModifier.WIN) else: type(text=Key.UP, modifier=KeyModifier.CTRL + KeyModifier.META) time.sleep(Settings.UI_DELAY)
class BookmarksOption(object): BOOKMARKING_TOOLS = Pattern('bookmarking_tools.png') SEARCH_BOOKMARKS = Pattern('search_bookmarks.png') class BookmarkingTools(object): VIEW_BOOKMARKS_TOOLBAR = Pattern('view_bookmarks_toolbar.png') VIEW_BOOKMARKS_SIDEBAR = Pattern('view_bookmarks_sidebar.png')
class SidebarBookmarks(object): BOOKMARKS_HEADER = Pattern('bookmarks_header.png') BOOKMARKS_MENU = Pattern('sidebar_bookmarks_menu.png') BOOKMARKS_MENU_SELECTED = Pattern('sidebar_bookmarks_menu_selected.png') OTHER_BOOKMARKS = Pattern('sidebar_other_bookmarks.png') BOOKMARKS_TOOLBAR_MENU = Pattern('bookmarks_toolbar_menu.png') class BookmarksToolbar(object): MOST_VISITED = Pattern('bookmarks_toolbar_most_visited.png')
class ImportAndBackup(object): BACKUP = Pattern('backupBookmarks.png') RESTORE = Pattern('fileRestoreMenu.png') class Restore(object): CHOOSE_FILE = Pattern('restoreFromFile.png') IMPORT_BOOKMARKS_FROM_HTML = Pattern('fileImport.png') EXPORT_BOOKMARKS_FROM_HTML = Pattern('fileExport.png') IMPORT_DATA_FROM_ANOTHER_BROWSER = Pattern('browserImport.png')
class DownloadManager(object): SHOW_ALL_DOWNLOADS = Pattern('downloadsHistory_show_all_Downloads.png') DOWNLOADS_FOLDER = Pattern('downloads_folder.png') class DownloadsPanel(object): DOWNLOADS_BUTTON = Pattern('downloads_button_open.png').similar(0.95) DOWNLOAD_RETRY = Pattern('downloadRetry.png') DOWNLOAD_RETRY_HIGHLIGHTED = Pattern( 'downloadRetry_highlighted.png').similar(0.95) DOWNLOAD_CANCEL = Pattern('downloadCancel.png').similar(0.95) DOWNLOAD_CANCEL_HIGHLIGHTED = Pattern( 'downloadCancel_highlighted.png').similar(0.95) NO_DOWNLOADS_FOR_THIS_SESSION = Pattern('emptyDownloads.png') OPEN_DOWNLOAD_FOLDER = Pattern( 'download_button_open_containing_folder.png') OPEN_CONTAINING_FOLDER = Pattern('open_containing_folder.png') TIME_LEFT = Pattern('time_left.png') BYTES_SECOND = Pattern('bytes_second.png') OF_1GB = Pattern('of_1gb.png') OPEN_DOWNLOAD_FOLDER = Pattern( 'download_button_open_containing_folder.png') # Downloaded files statuses class DownloadState(object): COMPLETED = Pattern('download_details_completed.png') CANCELED = Pattern('download_details_canceled.png') PROGRESS = Pattern('download_details_left_size.png') PAUSED = Pattern('download_details_paused.png') RETRY_DOWNLOAD = Pattern('download_details_retry_download.png') OPEN_FILE = Pattern('download_details_open_file.png') SPEED_PER_SECOND = Pattern('download_details_speed_per_second.png') MISSING_FILE = Pattern('download_details_file_moved_or_missing.png') # Library Menu Downloads Submenu. class Downloads(object): SHOW_DOWNLOADS_FOLDER = Pattern( 'appMenu-library-downloads-show-button_show_downloads_folder.png') PANEL_HEADER_DOWNLOADS = Pattern('panel_header_downloads.png') SHOW_ALL_DOWNLOADS = Pattern('library_menu_downloads_more.png') FILE_MOVED_OR_MISSING = Pattern('file_moved_or_missing.png') EXTRA_SMALL_FILE_5MB_ZIP = Pattern('5MB_zip.png') class AboutDownloads(object): NO_DOWNLOADS = Pattern('there_are_no_downloads.png') # Downloaded files options class DownloadsContextMenu(object): OPEN_CONTAINING_FOLDER = Pattern( 'downloads_open_containing_folder.png') CLEAR_PREVIEW_PANEL = Pattern('downloads_clear_preview_panel.png') COPY_DOWNLOAD_LINK = Pattern('downloads_copy_download_link.png') GO_TO_DOWNLOAD_PAGE = Pattern('downloads_go_to_download_page.png') REMOVE_FROM_HISTORY = Pattern('downloads_remove_from_history.png') PAUSE = Pattern('downloads_pause.png') RESUME = Pattern('downloads_resume.png')
class FindToolbar(object): FIND_CLOSEBUTTON = Pattern('find_closebutton.png') FINDBAR_TEXTBOX = Pattern('findbar_textbox.png') FIND_PREVIOUS = Pattern('find_previous.png') FIND_NEXT = Pattern('find_next.png') HIGHLIGHT = Pattern('highlight.png') FIND_CASE_SENSITIVE = Pattern('find_case_sensitive.png') FIND_ENTIRE_WORD = Pattern('find_entire_word.png') QUICK_FIND_LABEL = Pattern('quick_find_label.png') QUICK_FIND_LINKS_ONLY_LABEL = Pattern('quick_find_links_only_label.png') FIND_STATUS_PHRASE_NOT_FOUND = Pattern('findbar_find_status_phrase_not_found.png')
class LibraryMenu(object): HISTORY_BUTTON = Pattern('library_history_button.png') BOOKMARKS_OPTION = Pattern('library_menu_bookmarks_option.png') class BookmarksOption(object): BOOKMARKING_TOOLS = Pattern('bookmarking_tools.png') SEARCH_BOOKMARKS = Pattern('search_bookmarks.png') class BookmarkingTools(object): VIEW_BOOKMARKS_TOOLBAR = Pattern('view_bookmarks_toolbar.png') VIEW_BOOKMARKS_SIDEBAR = Pattern('view_bookmarks_sidebar.png')
class ViewBy(object): VIEW_BY_SITE = Pattern('by_site.png') VIEW_BY_LAST_VISITED = Pattern('by_last_visited.png') VIEW_BY_DATE_AND_SITE = Pattern('by_date_and_site.png') VIEW_BY_DATE = Pattern('by_date.png') VIEW_BY_MOST_VISITED = Pattern('by_most_visited.png') # Checked view menu items VIEW_BY_SITE_CHECKED = Pattern('by_site_checked.png') VIEW_BY_LAST_VISITED_CHECKED = Pattern('by_last_visited_checked.png') VIEW_BY_DATE_AND_SITE_CHECKED = Pattern('by_date_and_site_checked.png') VIEW_BY_DATE_CHECKED = Pattern('by_date_checked.png') VIEW_BY_MOST_VISITED_CHECKED = Pattern('by_most_visited_checked.png')
class DownloadState(object): COMPLETED = Pattern('download_details_completed.png') CANCELED = Pattern('download_details_canceled.png') PROGRESS = Pattern('download_details_left_size.png') PAUSED = Pattern('download_details_paused.png') RETRY_DOWNLOAD = Pattern('download_details_retry_download.png') OPEN_FILE = Pattern('download_details_open_file.png') SPEED_PER_SECOND = Pattern('download_details_speed_per_second.png') MISSING_FILE = Pattern('download_details_file_moved_or_missing.png') TEMPORARY_BLOCKED = Pattern('download_details_temporary_blocked.png')
class LocationBar(object): SHOW_HISTORY_BUTTON = Pattern('show_history_button.png') BOOKMARK_BUTTON = Pattern('bookmark_button.png') BOOKMARK_SELECTED_BUTTON = Pattern('bookmark_selected_button.png') RELOAD_BUTTON = Pattern('reload_button.png') DEFAULT_ZOOM_LEVEL = Pattern('default_zoom_level_toolbar.png') URL_BAR_30_ZOOM_LEVEL = Pattern('url_bar_30_zoom_level.png') URL_BAR_90_ZOOM_LEVEL = Pattern('url_bar_90_zoom_level.png').similar(0.7) URL_BAR_110_ZOOM_LEVEL = Pattern('url_bar_110_zoom_level.png') URL_BAR_300_ZOOM_LEVEL = Pattern('url_bar_300_zoom_level.png')
class TimeRange(object): LAST_HOUR = Pattern('last_hour.png') LAST_TWO_HOURS = Pattern('last_two_hours.png') LAST_FOUR_HOURS = Pattern('last_four_hours.png') TODAY = Pattern('today.png') EVERYTHING = Pattern('everything.png') # Focused time ranges. CLEAR_CHOICE_LAST_HOUR = Pattern( 'sanitize_duration_choice_last_hour.png') CLEAR_CHOICE_LAST_TWO_HOURS = Pattern( 'sanitize_duration_choice_last_two_hours.png') CLEAR_CHOICE_LAST_FOUR_HOURS = Pattern( 'sanitize_duration_choice_last_four_hours.png') CLEAR_CHOICE_TODAY = Pattern('sanitize_duration_choice_today.png') CLEAR_CHOICE_EVERYTHING = Pattern( 'sanitize_duration_choice_everything.png')
class ForgetLast(object): FORGET_TIMEFRAME_TITLE = Pattern( 'panelUI_panic_button_success_icon.png') LAST_FIVE_MINUTES = Pattern('panelUI_panic_5min.png') LAST_TWO_HOURS = Pattern('panelUI_panic_2hr.png') LAST_24_HOURS = Pattern('panelUI_panic_day.png') # Selected items LAST_FIVE_MINUTES_SELECTED = Pattern('panelUI_panic_5min_selected.png') LAST_TWO_HOURS_SELECTED = Pattern('panelUI_panic_2hr_selected.png') LAST_24_HOURS_SELECTED = Pattern('panelUI_panic_day_selected.png') FORGET_BUTTON = Pattern('panelUI_panic_view_button.png') SUCCESS_FORGET_MSG = Pattern('panelUI_panic_button_success_msg.png') CLOSE_FORGET_PANEL_BUTTON = Pattern( 'panelUI_panic_success_close_button.png')
class FindToolbar(object): FIND_CLOSEBUTTON = Pattern('find_closebutton.png') FINDBAR_TEXTBOX = Pattern('findbar_textbox.png') FIND_PREVIOUS = Pattern('find_previous.png') FIND_NEXT = Pattern('find_next.png') HIGHLIGHT = Pattern('highlight.png') FIND_CASE_SENSITIVE = Pattern('find_case_sensitive.png') FIND_ENTIRE_WORD = Pattern('find_entire_word.png')
class ShowColumns(object): NAME = Pattern('menucol_placesContentTitle.png') TAGS = Pattern('menucol_placesContentTags.png') LOCATION = Pattern('menucol_placesContentUrl.png') MOST_RECENT_VISIT = Pattern('menucol_placesContentDate.png') VISIT_COUNT = Pattern('menucol_placesContentVisitCount.png') ADDED = Pattern('menucol_placesContentDateAdded.png') LAST_MODIFIED = Pattern('menucol_placesContentLastModified.png')
class DownloadsContextMenu(object): OPEN_CONTAINING_FOLDER = Pattern( 'downloads_open_containing_folder.png') CLEAR_PREVIEW_PANEL = Pattern('downloads_clear_preview_panel.png') COPY_DOWNLOAD_LINK = Pattern('downloads_copy_download_link.png') GO_TO_DOWNLOAD_PAGE = Pattern('downloads_go_to_download_page.png') REMOVE_FROM_HISTORY = Pattern('downloads_remove_from_history.png') PAUSE = Pattern('downloads_pause.png') RESUME = Pattern('downloads_resume.png')
class MainWindow(object): if Settings.get_os() == Platform.MAC: MAIN_WINDOW_CONTROLS = Pattern('main_window_controls.png') UNHOVERED_MAIN_RED_CONTROL = Pattern('unhovered_main_red_control.png') HOVERED_MAIN_RED_CONTROL = Pattern('hovered_red_main_control.png') else: CLOSE_BUTTON = Pattern('main_close_control.png') MINIMIZE_BUTTON = Pattern('main_minimize_control.png') MAXIMIZE_BUTTON = Pattern('main_maximize_control.png') RESIZE_BUTTON = Pattern('main_resize_control.png')
class HamburgerMenu(object): ADDONS = Pattern('hamburger_menu_addons.png') SAVE_OPTIONS = Pattern('hamburger_menu_save_options.png') NEW_WINDOW = Pattern('hamburger_menu_new_window.png') HAMBURGER_MENU_ZOOM_INDICATOR = Pattern('appMenu_zoom_controls.png') EDIT_BUTTONS_BELOW_ZOOM_BUTTONS = Pattern( 'edit_buttons_below_zoom_buttons.png') HAMBUREGR_MENU = Pattern('PanelUI_menu_button.png') HAMBURGER_MENU_FIND_IN_PAGE_PATTERN = Pattern( 'hamburger_menu_find_in_page_pattern.png')
def get_image_size(of_what): """Get image size of asset image. :param str || Pattern of_what: Image name or Pattern object. :return: Width, height as tuple. """ needle_path = None scale_factor = 1 if isinstance(of_what, str): pattern = Pattern(of_what) needle_path = pattern.get_file_path() scale_factor = pattern.get_scale_factor() elif isinstance(of_what, Pattern): needle_path = of_what.get_file_path() scale_factor = of_what.get_scale_factor() needle = cv2.imread(needle_path) height, width, channels = needle.shape return int(width / scale_factor), int(height / scale_factor)
class AuxiliaryWindow(object): if Settings.get_os() == Platform.MAC: AUXILIARY_WINDOW_CONTROLS = Pattern('auxiliary_window_controls.png') RED_BUTTON_PATTERN = Pattern('unhovered_red_control.png').similar(0.9) HOVERED_RED_BUTTON = Pattern('hovered_red_button.png') else: CLOSE_BUTTON = Pattern('auxiliary_window_close_button.png') MAXIMIZE_BUTTON = Pattern('auxiliary_window_maximize.png') ZOOM_RESTORE_BUTTON = Pattern( 'minimize_full_screen_auxiliary_window.png') MINIMIZE_BUTTON = Pattern('auxiliary_window_minimize.png')
class DownloadsPanel(object): DOWNLOADS_BUTTON = Pattern('downloads_button_open.png').similar(0.95) DOWNLOAD_RETRY = Pattern('downloadRetry.png') DOWNLOAD_RETRY_HIGHLIGHTED = Pattern( 'downloadRetry_highlighted.png').similar(0.95) DOWNLOAD_CANCEL = Pattern('downloadCancel.png') DOWNLOAD_CANCEL_HIGHLIGHTED = Pattern( 'downloadCancel_highlighted.png').similar(0.95) NO_DOWNLOADS_FOR_THIS_SESSION = Pattern('emptyDownloads.png')
class LibraryMenu(object): BOOKMARKS_OPTION = Pattern('library_menu_bookmarks_option.png') class BookmarksOption(object): BOOKMARKING_TOOLS = Pattern('bookmarking_tools.png') SEARCH_BOOKMARKS = Pattern('search_bookmarks.png') class BookmarkingTools(object): VIEW_BOOKMARKS_TOOLBAR = Pattern('view_bookmarks_toolbar.png') VIEW_BOOKMARKS_SIDEBAR = Pattern('view_bookmarks_sidebar.png') class HistoryOption(object): VIEW_HISTORY_SIDEBAR = Pattern('view_history_sidebar.png') CLEAR_RECENT_HISTORY = Pattern('clear_recent_history.png') RECENTLY_CLOSED_TABS = Pattern('recently_closed_tabs.png') RECENTLY_CLOSED_WINDOWS = Pattern('recently_closed_windows.png') SHOW_ALL_HISTORY = Pattern('show_all_history.png')
class DownloadManager(object): SHOW_ALL_DOWNLOADS = Pattern('downloadsHistory_show_all_Downloads.png') class DownloadsPanel(object): DOWNLOADS_BUTTON = Pattern('downloads_button_open.png').similar(0.95) DOWNLOAD_RETRY = Pattern('downloadRetry.png') DOWNLOAD_RETRY_HIGHLIGHTED = Pattern( 'downloadRetry_highlighted.png').similar(0.95) DOWNLOAD_CANCEL = Pattern('downloadCancel.png') DOWNLOAD_CANCEL_HIGHLIGHTED = Pattern( 'downloadCancel_highlighted.png').similar(0.95) NO_DOWNLOADS_FOR_THIS_SESSION = Pattern('emptyDownloads.png') class Downloads(object): SHOW_DOWNLOADS_FOLDER = Pattern( 'appMenu-library-downloads-show-button_show_downloads_folder.png') PANEL_HEADER_DOWNLOADS = Pattern('panel_header_downloads.png') class AboutDownloads(object): NO_DOWNLOADS = Pattern('there_are_no_downloads.png')
class HistorySidebar(object): SIDEBAR_HISTORY_TITLE = Pattern('sidebar_history_title.png') SIDEBAR_HISTORY_ICON = Pattern('sidebar_history_icon.png') EXPLORED_HISTORY_ICON = Pattern('explored_history_icon.png') VIEW_BUTTON = Pattern('view_button.png') SEARCH_BOX = Pattern('history_search_box.png') SEARCH_BOX_FOCUSED = Pattern('history_search_box_focused.png') class ViewBy(object): VIEW_BY_SITE = Pattern('by_site.png') VIEW_BY_LAST_VISITED = Pattern('by_last_visited.png') VIEW_BY_DATE_AND_SITE = Pattern('by_date_and_site.png') VIEW_BY_DATE = Pattern('by_date.png') VIEW_BY_MOST_VISITED = Pattern('by_most_visited.png') # Checked view menu items VIEW_BY_SITE_CHECKED = Pattern('by_site_checked.png') VIEW_BY_LAST_VISITED_CHECKED = Pattern('by_last_visited_checked.png') VIEW_BY_DATE_AND_SITE_CHECKED = Pattern('by_date_and_site_checked.png') VIEW_BY_DATE_CHECKED = Pattern('by_date_checked.png') VIEW_BY_MOST_VISITED_CHECKED = Pattern('by_most_visited_checked.png') class Timeline(object): TODAY = Pattern('history_today.png') YESTERDAY = Pattern('history_yesterday.png') LAST_7_DAYS = Pattern('history_yesterday.png') JANUARY = Pattern('history_january.png') FEBRUARY = Pattern('history_february.png') MARCH = Pattern('history_march.png') APRIL = Pattern('history_april.png') MAY = Pattern('history_may.png') JUNE = Pattern('history_june.png') JULY = Pattern('history_july.png') AUGUST = Pattern('history_august.png') SEPTEMBER = Pattern('history_september.png') OCTOBER = Pattern('history_october.png') NOVEMBER = Pattern('history_november.png') DECEMBER = Pattern('history_december.png')
class NavBar(object): HOME_BUTTON = Pattern('home_button.png') BACK_BUTTON = Pattern('back_button.png') FORWARD_BUTTON = Pattern('forward_button.png') HAMBURGER_MENU = Pattern('hamburger_menu.png') LIBRARY_MENU = Pattern('library_menu.png')