import json import time import allure import pytest from selenium.webdriver.chrome.webdriver import WebDriver from config.ui_config import UIConfig from tests.api.utils.api_client import APIClient from tests.ui.pages.admin_page import AdminPage @allure.epic("Страница администратора") @allure.feature("Основной функционал") class TestAdminPage: @allure.story("Загрузка страницы") @allure.title("Проверка успешной загрузки страницы") @allure.severity(allure.severity_level.BLOCKER) @pytest.mark.smoke @pytest.mark.ui def test_page_load_succesfull(self, driver): admin_page = AdminPage(driver) with allure.step('1. Открыть страницу'): admin_page.open_admin_page() admin_page.take_screenshot("admin_page") @allure.story("Структура страницы") @allure.title("Проверка отображения элементов") @allure.severity(allure.severity_level.BLOCKER) @pytest.mark.smoke @pytest.mark.ui def test_page_elements_visiblity(self, driver): admin_page = AdminPage(driver) with allure.step('1. Открыть страницу'): admin_page.open_admin_page() admin_page.take_screenshot("admin_page") with allure.step('2. Проверка наличия кнопки блока логина'): assert admin_page.is_login_block_visible(), 'Кнопка блока логина не отобразилась' with allure.step('3. Проверка невидимости кнопки "try it out"'): assert not admin_page.is_login_tryitout_btn_visible(), 'Кнопка не должна быть видима' with allure.step('4. Проверка невидимости поля ввода'): assert not admin_page.is_login_textarea_visible(), 'Поле ввода не должно быть видимо' with allure.step('5. Проверка невидимости кнопки выполнения запроса'): assert not admin_page.is_login_execute_btn_visible(), 'Кнопка выполнения запроса не должна быть видимой' @allure.story("Функциональность") @allure.title("Проверка функциональности страницы") @allure.severity(allure.severity_level.BLOCKER) @pytest.mark.smoke @pytest.mark.ui def test_page_login_process(self, driver: WebDriver): admin_page = AdminPage(driver) with allure.step('1. Открыть страницу'): admin_page.open_admin_page() admin_page.wait_for_element(admin_page.LOGIN_BLOCK) admin_page.scroll_to_element(admin_page.LOGIN_BLOCK) admin_page.take_screenshot("admin_page") with allure.step('2. Нажать на блок логина'): admin_page.click_login_block() assert admin_page.is_login_tryitout_btn_visible(), 'Кнопка "try it out" должна быть видимой' with allure.step('3. Нажать на кнопку "try it out"'): admin_page.click_login_tryitout_btn() assert admin_page.is_login_textarea_visible(), 'Поле ввода должно быть видимым' assert admin_page.is_login_execute_btn_visible(), 'Кнопка выполнения запроса должна быть видимой' admin_page.scroll_to_element(admin_page.LOGIN_TRYITOUT_BTN) admin_page.take_screenshot('admin_page_login_block') with allure.step('4. Ввод данных для входа'): admin_page.scroll_to_element(admin_page.LOGIN_TEXTAREA) admin_page.take_screenshot("admin_page_login_area_unchanged") admin_page.enter_text_to_login_textarea(admin_page.LOGIN_DATA) time.sleep(0.5) admin_page.take_screenshot("admin_page_login_text_entered") with allure.step('5. Выполнение запроса'): admin_page.click_login_execute_btn() time.sleep(2.0) admin_page.scroll_to_element(admin_page.LOGIN_STATUS_CODE) admin_page.take_screenshot("admin_page_login_request_executed") with allure.step('6. Проверка статуса выполнения запроса'): admin_page.scroll_to_element(admin_page.LOGIN_STATUS_CODE) assert int(admin_page.get_login_status()) == 200 @allure.story("Добавление пользователя") @allure.title("Проверка функции добавления пользователя") @allure.severity(allure.severity_level.BLOCKER) @pytest.mark.smoke @pytest.mark.ui def test_page_user_adding(self, driver: WebDriver, auth_admin: APIClient): admin_page = AdminPage(driver) user_id = '' with allure.step('1. Открыть страницу'): admin_page.open_admin_page() admin_page.wait_for_element(admin_page.USER_BLOCK) admin_page.scroll_to_element(admin_page.USER_BLOCK) admin_page.take_screenshot("admin_page") with allure.step("2. Авторизоваться"): admin_page.click_login_block() admin_page.click_login_tryitout_btn() admin_page.enter_text_to_login_textarea(admin_page.LOGIN_DATA) time.sleep(0.5) admin_page.click_login_execute_btn() time.sleep(2.0) admin_page.scroll_to_element(admin_page.LOGIN_STATUS_CODE) admin_page.take_screenshot("admin_page_login_request_executed") with allure.step('3. Нажать на блок пользователя'): admin_page.click_user_block() assert admin_page.is_user_tryitout_btn_visible(), 'Кнопка "try it out" должна быть видимой' with allure.step('4. Нажать на кнопку "try it out"'): admin_page.click_user_tryitout_btn() assert admin_page.is_user_textarea_visible(), 'Поле ввода должно быть видимым' assert admin_page.is_user_execute_btn_visible(), 'Кнопка выполнения запроса должна быть видимой' admin_page.scroll_to_element(admin_page.USER_TRYITOUT_BTN) admin_page.take_screenshot('admin_page_user_block') with allure.step('5. Ввод данных для регистрации пользователя'): admin_page.scroll_to_element(admin_page.USER_TEXTAREA) admin_page.take_screenshot("admin_page_user_area_unchanged") admin_page.enter_text_to_user_textarea(admin_page.USER_DATA) time.sleep(0.5) admin_page.take_screenshot("admin_page_user_text_entered") with allure.step('6. Выполнение запроса'): admin_page.click_user_execute_btn() time.sleep(2.0) admin_page.scroll_to_element(admin_page.USER_STATUS_CODE) admin_page.take_screenshot("admin_page_user_request_executed") with allure.step('7. Проверка статуса выполнения запроса'): admin_page.scroll_to_element(admin_page.LOGIN_STATUS_CODE) assert int(admin_page.get_login_status()) == 200 with allure.step('8. Сохраняем id пользователя для удаления'): content = admin_page.get_user_response() user_id = json.loads(content)['id'] with allure.step('9. Проверка, что пользователь добавлен на сайт'): admin_page.open(UIConfig.get_url('team')) time.sleep(2) admin_page.take_screenshot('team_page_user') with allure.step('10. Удаляем пользователя через API'): auth_admin.delete_user(user_id)