Tests/tests/ui/test_home_page.py
2026-01-19 23:32:11 +04:00

224 lines
11 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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")