QA
Senior SDETFrameworks & Design PatternsFree question

Which design patterns have you used in automation frameworks?

60-second answer

The common ones are: Page Object and Page Component for UI structure; Factory, for creating drivers or API clients based on configuration; Singleton, for configuration that's loaded once, used carefully so it doesn't break parallel runs; Builder, for readable test data objects with sensible defaults; Strategy, to switch behaviour like login via UI, API or SSO at runtime; Facade, to hide multi-step workflows like placing an order behind one method; Decorator or Proxy, to add logging, retries or waits around driver calls; and Observer, through test listeners and event hooks.

Explanation

PatternFramework use
FactoryDriverFactory.create(browser)
SingletonConfig.get() (immutable, thread-safe)
BuilderUserBuilder.aUser().premium().withCart(3).build()
StrategyLoginStrategy (UI / API / cookie)
FacadeOrderFlows.placePaidOrder(user)
DecoratorEventFiringDecorator + WebDriverListener for logging
ObserverTestNG listeners, Playwright page.on(...)
Fluent interfacePage methods returning this or next page

Explain why you chose a pattern, not just its name.

Example

Selenium 4's EventFiringDecorator wrapped the driver to log every click and find with timings, which helped diagnose a slow page without touching test code.

Sample code

WebDriverListener listener = new WebDriverListener() {
    @Override public void beforeClick(WebElement element) {
        log.info("Click {}", element);
    }
    @Override public void afterFindElement(WebDriver d, By locator, WebElement result) {
        log.debug("Found {}", locator);
    }
};
WebDriver driver = new EventFiringDecorator<>(listener).decorate(new ChromeDriver());