import json import locale import logging import allure from assertpy import assert_that from ui_automation_framework.core import BasePage, TestStatus from ui_automation_framework.utils import CoreConfig from ui_automation_framework.utils import logger as cl from ui_automation_framework.utils.core_config import PYTEST_XDIST_WORKER from app.api_client import ApiClient class LoginPage(BasePage): log = cl.Logger(logging.DEBUG) def __init__(self, driver): super().__init__(driver) self.driver = driver self.login_locators = self.get_page_locators("LoginPage", "login_elements.json") self.api_client = ApiClient() self.ts = TestStatus(self.driver) @allure.step("opening login page") def open_login_page(self): self.driver.get(CoreConfig.ENV_BASE_URL + "/login") def login(self, email, password): self.wait_for_element_clickable(*self.locator(self.login_locators, "email_field")) self.send_text(email, *self.locator(self.login_locators, "email_field")) self.wait_for_element_clickable(*self.locator(self.login_locators, "password_field")) self.send_text(password, *self.locator(self.login_locators, "password_field")) self.wait_for_element_clickable(*self.locator(self.login_locators, "login_btn")) self.click_element(*self.locator(self.login_locators, "login_btn")) self.is_logged_in() @allure.step("user is logged in") def is_logged_in(self): header = self.wait_for_element_visible(*self.locator(self.login_locators, "header-market-switcher")) logged_in = header.is_displayed() self.ts.markFinal(logged_in, "user is logged in") self.log.info(f"locale: {locale.getdefaultlocale()}") return logged_in def login_with_worker(self): user_email = self.get_user_email_with_worker() self.log.info("worker id is: {}".format(PYTEST_XDIST_WORKER)) self.log.info("user email is: {}".format(user_email)) self.login(user_email, CoreConfig.USER_PASSWORD) return user_email def get_user_email_with_worker(self): num = "" self.log.info("PYTEST_XDIST_WORKER is: {}".format(PYTEST_XDIST_WORKER)) if PYTEST_XDIST_WORKER not in ["master", "gw0"]: num = int(PYTEST_XDIST_WORKER[2:]) user_email = "{}{}@{}".format(CoreConfig.USER_EMAIL.split("@")[0], num, CoreConfig.USER_EMAIL.split("@")[1]) return user_email @allure.step("get user with worker") def get_auth0_id(self): from_storage = self.driver.execute_script("return window.localStorage.getItem(arguments[0]);", "authData") id = str(json.loads(str(from_storage)).get("profile").get("id")).split("|")[1] self.log.info("local storage auth0 id is: {}".format(id)) return id @allure.step("verifying login page is opened") def is_opened(self): login_button = self.wait_for_element_visible(*self.locator(self.login_locators, "login_btn")) assert_that(self.is_element_displayed(element=login_button)).is_true()