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