Sobes.tech
Middle+

Кой модел смяташ за най-важен след Page Object?

sobes.tech AI

Отговор от AI

Метод на фабриката.

Позволява създаването на обекти без да се указва конкретен клас в клиентския код. Това е важно за гъвкавостта и разширяемостта на автоматизираните тестове, например при работа с различни браузъри или платформи.

Пример за използване в контекста на автоматизация:

Да предположим, че имаме интерфейс WebDriverFactory и неговите реализации за различни браузъри (ChromeWebDriverFactory, FirefoxWebDriverFactory). Методът на фабриката позволява да получим екземпляр на необходимия драйвер без да използваме условни конструкции (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("Несъвместим браузър: " + browser);
    }

    @AfterMethod
    public void tearDownTest() {
        if (driver != null) {
            driver.quit();
        }
    }
}

Предимства:

  • Ниска свързаност: Клиентският код зависи само от интерфейса на фабриката, а не от конкретните реализации.
  • Разширяемост: Лесно е да добавите поддръжка за нов браузър, като създадете нова фабрика и промените метода getWebDriverFactory.
  • Изолация: Логиката за създаване на обекта е концентрирана на едно място (фабриката), което улеснява поддръжката.