Metadata-Version: 2.1
Name: core-page
Version: 0.0.1
Summary: Утилита для расширенного взаимодействия с любым веб-сайтом и его страницами
Author: dmitry
Author-email: dmitryvshivtsev@gmail.com
Description-Content-Type: text/markdown
License-File: LICENSE

# core_page

Библиотека для автоматической работы с любыми веб-страницами и их элементами на базе Selenium. 
Вдохновлена статьёй на [Хабр](https://habr.com/ru/articles/472156/) и упрощает написание автоматических тестов 
с реализацией паттерна PageObject. Ускорьте написание кода, а также сделайте его лаконичнее, яснее и гибче.

## Описание

Есть Selenium из коробки, который и предоставляет методы для работы со страницами. Зачем нужна эта библиотека?
В процессе написания тестов, разработчик регулярно ищет элементы на странице, переходит на другие страницы,
получает аттрибуты и т.д.. Все это, как правило, оборачивается в ожидания, чтобы избежать внезапных ошибок.
Библиотека позволяет скрыть часть логики, а также комбинирует различные инструменты в отдельные методы.
Благодаря этому, ускоряется написание тестов, их понимание и последующая поддержка. 


Преимущества перед использованием Selenium из коробки:
- Простое использование, путем наследования от базового класса в классы конкретных страниц.
- Возможность установить настройки для теста, просто передав их в аргументах класса.
- Базовые методы поиска элементов расширены и включают в себя явное ожидание.
- Методы для получения аттрибутов у любого элемента. Просто передайте локатор.
- Скачивание изображений и возможность их проверки.


## Примеры использования

Например, на веб-сайте имеется главная страница, которая содержит различные элементы. Необходимо перейти на эту страницу 
и проверить наличие заголовка на странице и его содержимое (текст заголовка).
В таком случае, создается класс *MainPage* в файле `main_page.py` и наследуется от базового класса *BasePage*.

```python
# main_page.py

from e2e.core_page.base_page import BasePage


class MainPage(BasePage):
    def check_title(self):
        actual_title = self.find_element(locator).text
        assert actual_title == expected_title
```
Метод `find_element()` определён в базовом классе и используется для поиска элемента. Если элемент найден, 
то вызывается метод text для получения текста заголовка и проверяем его.

Далее, создаем файл `test_main_page.py`, где описываем тест-кейс для тестирования этого сценария, используя PyTest:

```python
# test_main_page.py

from e2e.page_objects import MainPage


def test_main_page_title(driver):
    page = MainPage(driver=driver, url_suffix='', window_size=(1920, 1080))
    page.go_to_site()
    page.check_title()
```

Мы создаём экземпляр класса *MainPage* и передаём необходимые параметры. Далее, используем метод `go_to_site()` для 
перехода на страницу, определенную в базовом классе. После чего, мы вызываем метод класса *MainPage*, который выполняет 
необходимый сценарий тестирования.
