Sobes.tech
Junior

Как организирате структурата за хедъра?

sobes.tech AI

Отговор от 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(); // Предполага се, че има метод за кликване върху иконата за търсене
        // Проверка, че се показват резултатите от търсенето
    }
}

Такъв подход осигурява четливост, поддръжка и повторно използване на кода при работа с хедъра на различни страници на приложението.