Back to questions
Middle+
170
questionbank
Какой паттерн ты считаешь самым важным после Page Object?
Sobes Copilot
Get answers in real time
Answer from AI
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. - Изоляция: Логика создания объекта сосредоточена в одном месте (фабрике), что упрощает поддержку.