Sobes.tech
Junior

Jak organizujesz strukturę dla nagłówka?

sobes.tech AI

Odpowiedź od AI

Nagłówek może być reprezentowany jako obiekt Page zawierający lokalizatory i metody do interakcji z elementami nagłówka (logo, punkty menu, przyciski wyszukiwania, koszyk itp.).

Lokalizatory można przechowywać w klasie lub w osobnym pliku konfiguracyjnym.

Struktura klasy będzie mniej więcej taka:

public class HeaderPage {

    // Lokalizatory elementów nagłówka
    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']");

    // Metody do interakcji z elementami
    public void clickLogo() {
        driver.findElement(logo).click();
    }

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

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

    // Metody do pracy z elementami wewnątrz nagłówka, np. menu
    public MenuItem clickMenuItem(String itemName) {
        // Logika wyszukiwania i klikania elementu menu
        return new MenuItem(/*...*/); // Zwracamy obiekt elementu menu
    }
}

Dla bardziej skomplikowanych nagłówków z rozwijanymi menu lub podmenu może być konieczne utworzenie osobnych obiektów Page dla tych elementów, do których dostęp będzie realizowany przez metody nagłówka.

Przykład struktury folderów projektu:

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

W testach będziemy korzystać z metod HeaderPage do wykonywania działań i sprawdzeń związanych z nagłówkiem.

public class HeaderTests extends BaseTest { // Klasa bazowa do inicjalizacji drivera

    @Test
    public void testLogoClickNavigatesToHomePage() {
        HeaderPage header = new HeaderPage();
        header.clickLogo();
        // Sprawdzenie, czy nastąpiło przejście na stronę główną
        // Na przykład: assert.assertEquals(driver.getCurrentUrl(), "https://example.com/");
    }

    @Test
    public void testCanSearchFromHeader() {
        HeaderPage header = new HeaderPage();
        header.enterSearchTerm("test product");
        header.clickSearchIcon(); // Zakładamy, że istnieje metoda do kliknięcia ikony wyszukiwania
        // Sprawdzenie, czy wyświetlane są wyniki wyszukiwania
    }
}

Takie podejście zapewnia czytelność, łatwość utrzymania i ponowne użycie kodu podczas pracy z nagłówkiem na różnych stronach aplikacji.