class TopChartsAppleTabLocators: # headers STICKY_HEADER = "//*[contains(@class, 'sticky-header show')]" STICKY_HEADER_APPLE_ICON = f"{STICKY_HEADER}//../*[contains(@class, 'icon-apple')]" STICKY_HEADER_TOP_TRACKS = f"{STICKY_HEADER}//../*[text()='Top tracks']" STICKY_HEADER_MARKET_GENRE_DATE = f"{STICKY_HEADER}//../*[@tag]" STICKY_HEADER_CLOCK_ICON = f"{STICKY_HEADER}//../*[contains(@class, 'icon-time')]" CHARTS_TABLE_HEADER_NON_STICKY = "//*[contains(@class, 'tableHeader') and not(contains(@class, 'show'))]" CHARTS_TABLE_HEADER_STICKY = "//*[contains(@class, 'sticky-header show')]" CHARTS_TABLE_SUB_HEADER_STICKY = "//*[contains(@class, 'tableHeader show')]" # buttons and dropdowns BACK_TO_TOP_BUTTON = "//*[contains(@class, 'backToTop show')]" PERIOD_DD = "//*[@id='apple-period-dd']" MARKET_DD = "//*[@id='top-charts-apple-market-dd']" MARKET_DD_FILTER_INPUT = "//*[@id='top-charts-apple-market-dd-filter-input']" MARKET_DD_LIST_OF_MARKETS = "//*[contains(@id, 'market-dd-item') and contains(@id, 'label')]" MARKET_DD_CLOSE_ICON = "//*[@id='top-charts-apple-market-dd-filter-input-close-icon']" MARKET_DD_NO_MARKETS_PLACEHOLDER = "//*[.='No markets found.']" MARKET_DD_ITEM = "//*[contains(@id, 'item') and text()='{}']" EXPORT_BUTTON = "//*[@id='top-charts-apple-export-btn']" FILTER_INPUT = "//*[@id='top-charts-apple-filter-input']" I_ICON = "//*[@id='top-charts-apple-hint-icon']" # table column headers chart_apple_cell = "charts-table-cell-" position, trend, image, name, release_date, peak_position, peak_position_date, entry_position, \ entry_position_date, days_on_chart = \ "position", "trend", "image", "name", "release-date", "entry-position", "entry-position-date", \ "peak-position", "peak-position-date", "days-on-chart" CELL_POSITION_HEADER = f"//*[@id='{chart_apple_cell}{position}']" CELL_POSITION_TREND_HEADER = f"//*[@id='{chart_apple_cell}{trend}']" CELL_IMAGE_HEADER = f"//*[@id='{chart_apple_cell}{image}']" CELL_TRACK_HEADER = f"//*[@id='{chart_apple_cell}{name}']" CELL_RELEASE_DATE_HEADER = f"//*[@id='{chart_apple_cell}{release_date}']" CELL_PEAK_LIFETIME_POSITION_HEADER = f"//*[@id='{chart_apple_cell}{peak_position}']" CELL_PEAK_LIFETIME_POSITION_DATE_HEADER = f"//*[@id='{chart_apple_cell}{peak_position_date}']" CELL_ENTRY_POSITION_HEADER = f"//*[@id='{chart_apple_cell}{entry_position}']" CELL_ENTRY_POSITION_DATE_HEADER = f"//*[@id='{chart_apple_cell}{entry_position_date}']" CELL_ON_CHART_LIFETIME_DAYS_HEADER = f"//*[@id='{chart_apple_cell}{days_on_chart}']" # table column values CELL_POSITION_VALUES = f"//*[contains(@id, '{chart_apple_cell}{position}-')]" CELL_POSITION_TREND_VALUES = f"//*[contains(@id, '{chart_apple_cell}{trend}-')]" CELL_IMAGE_VALUES = f"//*[contains(@id, '{chart_apple_cell}{image}-')]" CELL_TRACK_VALUES = f"//*[contains(@id, '{chart_apple_cell}{name}-')]" CELL_RELEASE_DATE_VALUES = f"//*[contains(@id, '{chart_apple_cell}{release_date}-')]" CELL_PEAK_LIFETIME_POSITION_VALUES = f"//*[contains(@id, '{chart_apple_cell}{peak_position}-') and not(contains(@id, 'date'))]" CELL_PEAK_LIFETIME_POSITION_DATE_VALUES = f"//*[contains(@id, '{chart_apple_cell}{peak_position_date}-')]" CELL_ENTRY_POSITION_VALUES = f"//*[contains(@id, '{chart_apple_cell}{entry_position}-') and not(contains(@id, 'date'))]" CELL_ENTRY_POSITION_DATE_VALUES = f"//*[contains(@id, '{chart_apple_cell}{entry_position_date}-')]" CELL_ON_CHART_LIFETIME_DAYS_VALUES = f"//*[contains(@id, '{chart_apple_cell}{days_on_chart}-')]" ENTRY_REENTRY_TOOLTIP = "//*[text()='New Entry' or text()='Re-Entry']" # table NO_RESULTS = "//*[text()='No results to show.']"