224 lines
11 KiB
Python
224 lines
11 KiB
Python
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")
|
||
|
||
|