Назад к вопросам
Middle+
138
questionbank
Какой паттерн ты считаешь самым важным после Page Object?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Factory Method.
Он позволяет создавать объекты без указания конкретного класса в коде клиента. Это важно для гибкости и расширяемости автотестов, например, при работе с различными браузерами или платформами.
Пример использования в контексте автоматизации:
Предположим, у нас есть интерфейс WebDriverFactory и его реализации для разных браузеров (ChromeWebDriverFactory, FirefoxWebDriverFactory). Factory Method позволяет получить экземпляр нужного драйвера, не прибегая к условным конструкциям (if/else) в тестовом коде.
// Интерфейс фабрики
interface WebDriverFactory {
WebDriver createDriver();
}
// Реализация для Chrome
class ChromeWebDriverFactory implements WebDriverFactory {
@Override
public WebDriver createDriver() {
WebDriverManager.chromedriver().setup();
return new ChromeDriver();
}
}
// Реализация для Firefox
class FirefoxWebDriverFactory implements WebDriverFactory {
@Override
public WebDriver createDriver() {
WebDriverManager.firefoxdriver().setup();
return new FirefoxDriver();
}
}
// Использование фабрики в тесте
public class BaseTest {
protected WebDriver driver;
@BeforeMethod
public void setupTest() {
WebDriverFactory factory = getWebDriverFactory("chrome"); // Получить нужную фабрику (реализация может быть разной)
driver = factory.createDriver(); // Создать драйвер через фабрику
driver.manage().window().maximize();
}
private WebDriverFactory getWebDriverFactory(String browser) {
if ("chrome".equalsIgnoreCase(browser)) {
return new ChromeWebDriverFactory();
} else if ("firefox".equalsIgnoreCase(browser)) {
return new FirefoxWebDriverFactory();
}
throw new IllegalArgumentException("Unsupported browser: " + browser);
}
@AfterMethod
public void tearDownTest() {
if (driver != null) {
driver.quit();
}
}
}
Преимущества:
- Низкая связность: Клиентский код зависит только от интерфейса фабрики, а не от конкретных реализаций.
- Расширяемость: Легко добавить поддержку нового браузера, создав новую фабрику и изменив метод
getWebDriverFactory. - Изоляция: Логика создания объекта сосредоточена в одном месте (фабрике), что упрощает поддержку.