Как организирате структурата за хедъра?
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(); // Предполага се, че има метод за кликване върху иконата за търсене
// Проверка, че се показват резултатите от търсенето
}
}
Такъв подход осигурява четливост, поддръжка и повторно използване на кода при работа с хедъра на различни страници на приложението.