После каких функций можно ставить точку и вызывать следующий метод?

«После каких функций можно ставить точку и вызывать следующий метод?» — вопрос из категории ООП, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В контексте проектирования тестовых фреймворков или вспомогательных классов в QA (например, на Java или Python), цепочка вызовов (method chaining) строится по одному принципу: метод должен возвращать объект, который предоставляет следующий вызываемый метод.

Это часто используется в паттернах типа Builder или Page Object для улучшения читаемости тестов.

Пример на Java (Page Object для тестов веб-приложения):

public class LoginPage {
    private WebDriver driver;

    public LoginPage(WebDriver driver) {
        this.driver = driver;
    }

    // Метод возвращает `this`, позволяя строить цепочки
    public LoginPage enterUsername(String username) {
        driver.findElement(By.id("username")).sendKeys(username);
        return this;
    }

    public LoginPage enterPassword(String password) {
        driver.findElement(By.id("password")).sendKeys(password);
        return this;
    }

    public HomePage clickLogin() {
        driver.findElement(By.id("login-btn")).click();
        return new HomePage(driver); // Возвращает следующий Page Object
    }
}

// Использование в тесте:
new LoginPage(driver)
    .enterUsername("testUser") // Возвращает LoginPage
    .enterPassword("pass123")  // Возвращает LoginPage
    .clickLogin();             // Возвращает HomePage

Ключевое правило: Если метод возвращает void или примитивный тип (например, boolean из проверки), построить цепочку после него нельзя. Цепочка возможна после методов, возвращающих объекты (другой Page Object, коллекцию элементов, сам билдер и т.д.).