from allure_commons._allure import step from assertpy import assert_that from playwright.sync_api import Page from src.helpers.logger import Logger from src.locators.juno_page.juno_page import JunoPageLocators from src.ui_elements.base_ui_element import BaseUIElement class JunoPage: log = Logger() def __init__(self, page: Page): self.page = page self.entity_type = 'juno' self.url = f'/{self.entity_type}' self.position_header = BaseUIElement(self.page, JunoPageLocators.CELL_POSITION_HEADER, 'Juno - position header column') self.position_values = BaseUIElement(self.page, JunoPageLocators.CELL_POSITION_VALUES, 'Juno - position values') self.current_week_streams_header = BaseUIElement(self.page, JunoPageLocators.CELL_CURRENT_WEEK_STREAMS_HEADER, 'Juno - current week streams header column') self.lf_change_header = BaseUIElement(self.page, JunoPageLocators.CELL_LF_CHANGE_HEADER, 'Juno - lf change column') self.current_week_streams_values = BaseUIElement(self.page, JunoPageLocators.CELL_CURRENT_WEEK_STREAMS_VALUES, 'Juno - current week streams values') self.lf_change_values_streams = BaseUIElement(self.page, JunoPageLocators.CELL_LF_CHANGE_VALUES_STREAMS, 'Juno - lf change streams values') self.lf_change_values_percentage = BaseUIElement(self.page, JunoPageLocators.CELL_LF_CHANGE_VALUES_PERCENTAGE, 'Juno - lf change streams percentage') self.lf_change_values_arrows = BaseUIElement(self.page, JunoPageLocators.CELL_LF_CHANGE_VALUES_ARROWS, 'Juno - lf change streams arrows') @step("Juno Page - is loaded") def is_loaded(self): self.position_values.exists_multiple() @step("Juno Page - is loaded") def get_lf_change_values(self): self.lf_change_values_arrows.exists_multiple() values_arrows = self.lf_change_values_arrows._element.all() values_streams = self.lf_change_values_streams.get_texts_from_list() values_streams = [s.replace(",", "") for s in values_streams] values_percentage = self.lf_change_values_percentage.get_texts_from_list() values_percentage = [int(p.replace("(", "").replace("%)", "").replace('k', '000').replace('M', '000000')) for p in values_percentage] values_sign = [v.get_attribute("class") .split(" ")[-1] .split("-")[-1] for v in values_arrows] for v in values_sign: assert_that(['down', 'up']).contains(v) values_sign = [v.replace('up', '') .replace('down', '-') for v in values_sign] values_streams_sign = [int(f"{s}{v}") for s in values_sign for v in values_streams] data = {"streams": values_streams_sign, "percentage": values_percentage} self.log.info(f"data: {data}") return data