import pytest import allure from selenium.webdriver.chrome.webdriver import WebDriver from config.ui_config import UIConfig import time from tests.ui.pages.home_page import HomePage @allure.epic("Домашняя страница") @allure.feature("Основной функционал") class TestTeamPage: @allure.story("Загрузка страницы") @allure.title("Проверка успешной загрузки страницы") @allure.severity(allure.severity_level.BLOCKER) @pytest.mark.smoke @pytest.mark.ui def test_page_load_successfully(self, driver): """ Тест проверяет успешную загрузку страницы Team """ home_page = HomePage(driver) with allure.step("1. Открыть страницу"): home_page.open_home_page() home_page.take_screenshot("home_page_loaded") with allure.step("2. Проверить заголовок окна браузера"): page_title = driver.title allure.attach(page_title, name="page_title", attachment_type=allure.attachment_type.TEXT) assert page_title, "Заголовок страницы пустой" @allure.story("Контент страницы") @allure.title("Проверка текстового содержания страницы") @allure.severity(allure.severity_level.CRITICAL) @pytest.mark.regression def test_page_content_validation(self, driver): """ Тест проверяет корректность текстового содержания страницы """ home_page = HomePage(driver) with allure.step("1. Открыть страницу"): home_page.open_home_page() with allure.step("2. Проверить заголовок"): title = home_page.get_text(home_page.LOGO) assert title == "Team", f"Неверный заголовок: {title}" with allure.step("4. Проверить сообщения о пустом состоянии"): team_message = home_page.check_no_team_members_message() articles_message = home_page.check_no_articles_message() allure.attach( f"Сообщение о команде: {team_message}\nСообщение о статьях: {articles_message}", name="empty_state_messages", attachment_type=allure.attachment_type.TEXT ) with allure.step("5. Сделать скриншот всей страницы"): driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(1) home_page.take_screenshot("full_page_content") @allure.story("Структура страницы") @allure.title("Проверка структуры и порядка элементов") @allure.severity(allure.severity_level.NORMAL) @pytest.mark.ui def test_page_structure(self, driver): """ Тест проверяет правильность структуры расположения элементов """ home_page = HomePage(driver) with allure.step("1. Открыть страницу Team"): home_page.open_home_page() with allure.step("2. Проверить наличие всех разделов"): assert home_page.is_meet_the_team_section_displayed(), \ "Раздел 'MEET THE TEAM' не отображается" assert home_page.is_latest_articles_section_displayed(), \ "Раздел 'LATEST ARTICLES' не отображается" with allure.step("3. Проверить кнопку VIEW ALL team"): button = home_page.is_team_view_all_displayed() assert button, "Кнопка не отобразилась" with allure.step("4. Проверить кнопку VIEW ALL article"): button = home_page.is_article_view_all_displayed() assert button, "Кнопка не отобразилась" @allure.story("Функциональность") @allure.title("Проверка кликабельности элементов") @allure.severity(allure.severity_level.NORMAL) @pytest.mark.regression def test_elements_interactivity(self, driver): """ Тест проверяет кликабельность интерактивных элементов """ home_page = HomePage(driver) with allure.step("1. Открыть страницу Team"): home_page.open_home_page() with allure.step("2. Проверить кликабельность кнопки VIEW ALL team"): button_team = home_page.find_element(home_page.TEAM_VIEW_ALL) assert button_team.is_enabled(), "Кнопка VIEW ALL не активна" # Проверяем, что это ссылка tag_name = button_team.tag_name assert tag_name.lower() in ['a', 'button'], \ f"Элемент не является ссылкой или кнопкой (тег: {tag_name})" with allure.step("3. Проверить кликабельность кнопки VIEW ALL article"): button_article = home_page.find_element(home_page.ARTICLE_VIEW_ALL) assert button_article.is_enabled(), "Кнопка VIEW ALL не активна" # Проверяем, что это ссылка tag_name = button_article.tag_name assert tag_name.lower() in ['a', 'button'], \ f"Элемент не является ссылкой или кнопкой (тег: {tag_name})" with allure.step("4. Навести курсор на кнопку VIEW ALL team"): from selenium.webdriver.common.action_chains import ActionChains actions = ActionChains(driver) actions.move_to_element(button_team).perform() time.sleep(0.5) # Проверяем изменение стиля (опционально) home_page.take_screenshot("team_view_all_button_hover") with allure.step("4. Навести курсор на кнопку VIEW ALL article"): from selenium.webdriver.common.action_chains import ActionChains actions = ActionChains(driver) actions.move_to_element(button_article).perform() time.sleep(0.5) # Проверяем изменение стиля (опционально) home_page.take_screenshot("article_view_all_button_hover") @allure.story("Навигация") @allure.title("Проверка поведения кнопки VIEW ALL") @allure.severity(allure.severity_level.CRITICAL) @pytest.mark.smoke def test_view_all_button_functionality(self, driver: WebDriver): """ Тест проверяет функциональность кнопки VIEW ALL """ home_page = HomePage(driver) with allure.step("1. Открыть страницу Team"): home_page.open_home_page() initial_url = driver.current_url allure.attach(initial_url, name="initial_url", attachment_type=allure.attachment_type.TEXT) with allure.step("2. Нажать кнопку VIEW ALL team"): home_page.click_view_all_team_button() time.sleep(2) # Ждем загрузки new_url = driver.current_url allure.attach(new_url, name="new_url", attachment_type=allure.attachment_type.TEXT) with allure.step("3. Проверить изменение URL"): # Проверяем, что URL изменился (или остался тем же, если это anchor link) assert new_url == UIConfig.get_url("team"), "Совершен переход на неверную страницу" with allure.step("4. Возвращаемся на главную"): driver.back() with allure.step("2. Нажать кнопку VIEW ALL article"): home_page.click_view_all_article_button() time.sleep(2) # Ждем загрузки new_url = driver.current_url allure.attach(new_url, name="new_url", attachment_type=allure.attachment_type.TEXT) with allure.step("3. Проверить изменение URL"): # Проверяем, что URL изменился (или остался тем же, если это anchor link) assert new_url == UIConfig.get_url("blog"), "Совершен переход на неверную страницу" @allure.story("Контент страницы") @allure.title("Проверка появления карточек") @allure.severity(allure.severity_level.CRITICAL) @pytest.mark.regression def test_cards_visiblity(self, driver, gen_data_fixture): """ Тест проверяет появление предложенных карточек """ home_page = HomePage(driver) with allure.step("1. Открыть страницу"): home_page.open_home_page() with allure.step("2. Проверка существования карточки автора"): card = home_page.is_member_card_displayed() assert card, "Карточка пользователя не отобразилась" with allure.step("3. Проверка реакции карточки на наведение"): from selenium.webdriver.common.action_chains import ActionChains member_card = home_page.find_element(home_page.AUTHOR_CARD) actions = ActionChains(driver) actions.move_to_element(member_card).perform() time.sleep(0.5) home_page.take_screenshot("Member_card_hower_reaction") with allure.step("4. Проверка существования карточки статьи"): card = home_page.is_article_card_displayed() assert card, "Карточка статьи не отобразилась" with allure.step("5. Проверка реакции карточки на наведение"): from selenium.webdriver.common.action_chains import ActionChains member_card = home_page.find_element(home_page.ARTICLE_CARD) actions = ActionChains(driver) actions.move_to_element(member_card).perform() time.sleep(0.5) home_page.take_screenshot("Member_card_hower_reaction")