Назад к вопросам
Junior
71
questionbank

Как вы организуете структуру для хедера?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Хедер может быть представлен как Page Object, содержащий локаторы и методы взаимодействия с элементами хедера (логотип, пункты меню, кнопки поиска, корзины и т.д.).

Локаторы можно хранить в классе или отдельном файле конфигурации.

Структура класса будет примерно такой:

public class HeaderPage {

    // Локаторы элементов хедера
    private final By logo = By.cssSelector(".header__logo");
    private final By searchBar = By.id("search-input");
    private final By cartIcon = By.xpath("//a[@class='header__cart']");

    // Методы взаимодействия с элементами
    public void clickLogo() {
        driver.findElement(logo).click();
    }

    public void enterSearchTerm(String term) {
        driver.findElement(searchBar).sendKeys(term);
    }

    public void clickCartIcon() {
        driver.findElement(cartIcon).click();
    }

    // Методы для работы с элементами внутри хедера, например, меню
    public MenuItem clickMenuItem(String itemName) {
        // Логика поиска и клика по пункту меню
        return new MenuItem(/*...*/); // Возвращаем объект пункта меню
    }
}

Для более сложных хедеров с выпадающими меню или подменю может потребоваться создание отдельных Page Objects для этих элементов, доступ к которым будет осуществляться через методы хедера.

Пример структуры папок проекта:

src/
├── main/
│   └── java/
│       └── com/
│           └── example/
│               └── project/
│                   └── pages/
│                       ├── HeaderPage.java
│                       └── components/
│                           ├── MenuItem.java
│                           └── SearchBar.java
└── test/
    └── java/
        └── com/
            └── example/
                └── project/
                    └── tests/
                        └── HeaderTests.java

В тестах мы будем использовать методы из HeaderPage для выполнения действий и проверок, связанных с хедером.

public class HeaderTests extends BaseTest { // Базовый класс для инициализации драйвера

    @Test
    public void testLogoClickNavigatesToHomePage() {
        HeaderPage header = new HeaderPage();
        header.clickLogo();
        // Проверка, что произошел переход на домашнюю страницу
        // Например, assert.assertEquals(driver.getCurrentUrl(), "https://example.com/");
    }

    @Test
    public void testCanSearchFromHeader() {
        HeaderPage header = new HeaderPage();
        header.enterSearchTerm("test product");
        header.clickSearchIcon(); // Предполагается, что есть метод для клика по иконке поиска
        // Проверка, что отображаются результаты поиска
    }
}

Такой подход обеспечивает читаемость, поддерживаемость и повторное использование кода при работе с хедером на разных страницах приложения.