import os from os import path import pytest from allure import step from playwright.sync_api import Page, Browser from src import config from src.helpers.logger import Logger from src.helpers.user_utils import get_state_path, get_user_with_num, get_thread_num, clear_state_file from src.locators.apollo_header.apollo_header import ApolloHeaderLocators from src.locators.login_page_locators import LoginPageLocators from src.ui_elements.base_ui_element import BaseUIElement @pytest.mark.usefixtures("app") class LoginPage: log = Logger() def __init__(self, page: Page): self.page = page self.browser = Browser self.entity_type = 'login' self.url = f'/{self.entity_type}' self.login_input = BaseUIElement(self.page, LoginPageLocators.LOGIN_INPUT, 'Login Page - username') self.pass_input = BaseUIElement(self.page, LoginPageLocators.PASSWORD_INPUT, 'Login Page - pass') self.submit_button = BaseUIElement(self.page, LoginPageLocators.SUBMIT_BUTTON, 'Login Page - submit') self.global_search_input = BaseUIElement(self.page, ApolloHeaderLocators.GLOBAL_SEARCH_INPUT, 'Header - Market switcher') @step("Login Page - login") def login(self): user = get_user_with_num() file_name = get_state_path() if path.exists(file_name) and os.stat(file_name).st_size > 10: self.page.goto(config.ENV_BASE_URL) self.log.info(f"state login: {get_thread_num()}") else: self.page.goto(config.ENV_BASE_URL + self.url) self.login_input.input_text(user) self.pass_input.input_text(config.USER_PASSWORD) self.submit_button.click() self.log.info(f"login new: {get_thread_num()}") self.global_search_input.exists() clear_state_file() self.page.context.storage_state(path=file_name)