Назад к вопросам
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.
  • Изоляция: Логика создания объекта сосредоточена в одном месте (фабрике), что упрощает поддержку.