Base Classes

Introduction

A Base Class is a class that contains common properties and methods that can be shared by multiple child classes. Instead of writing the same code repeatedly, developers create a base class and allow other classes to inherit from it.

Base classes are an important part of abstraction because they define common functionality while allowing child classes to provide their own specific implementations.

In JavaScript, base classes are created using the class keyword, and child classes inherit from them using the extends keyword.

For automation engineers, base classes are widely used in Page Object Models (POM), browser utilities, API clients, database helpers, and reporting modules. Common functionality such as browser launch, page navigation, login, screenshots, and waiting for elements is placed inside a base class so that all child classes can reuse it.

In this tutorial, you’ll learn how to create and use base classes in Node.js.


What is a Base Class?

A Base Class is a parent class that provides common functionality for one or more child classes.

Child classes inherit the properties and methods of the base class and can also add their own features or override inherited methods.


Why Use Base Classes?

Base classes help developers:

  • Eliminate duplicate code.

  • Improve code reusability.

  • Simplify application design.

  • Support abstraction.

  • Improve maintainability.

  • Create scalable applications.

  • Organize related functionality.


Syntax

class Animal {

    eat() {

        console.log(
            "Animal is eating."
        );

    }

}

class Dog extends Animal {

}

const dog =
    new Dog();

dog.eat();

Example 1: Basic Base Class

class Animal {

    eat() {

        console.log(
            "Animal is eating."
        );

    }

}

class Dog extends Animal {

}

const dog =
    new Dog();

dog.eat();

Sample Output

Animal is eating.

The Dog class inherits the eat() method from the Animal base class.


Example 2: Base Class with Multiple Child Classes

class Vehicle {

    start() {

        console.log(
            "Vehicle started."
        );

    }

}

class Car extends Vehicle {

}

class Bike extends Vehicle {

}

const car =
    new Car();

const bike =
    new Bike();

car.start();

bike.start();

Sample Output

Vehicle started.
Vehicle started.

Example 3: Base Class with Constructor

class Employee {

    constructor(name) {

        this.name = name;

    }

    displayName() {

        console.log(this.name);

    }

}

class Developer extends Employee {

}

const developer =
    new Developer("Rahul");

developer.displayName();

Sample Output

Rahul

Example 4: Base Class with Overridden Method

class Animal {

    sound() {

        console.log(
            "Animal makes a sound."
        );

    }

}

class Dog extends Animal {

    sound() {

        console.log(
            "Dog barks."
        );

    }

}

const dog =
    new Dog();

dog.sound();

Sample Output

Dog barks.

The child class overrides the method inherited from the base class.


Example 5: Real-World Example

Employee management system.

class Employee {

    login() {

        console.log(
            "Employee logged in."
        );

    }

}

class Manager extends Employee {

}

class Tester extends Employee {

}

const manager =
    new Manager();

const tester =
    new Tester();

manager.login();

tester.login();

Sample Output

Employee logged in.
Employee logged in.

Automation Testing Example

Base classes are one of the most important components of automation frameworks.

Playwright Example

Reusable page functionality.

class BasePage {

    openApplication() {

        console.log(
            "Opening application."
        );

    }

}

class LoginPage extends BasePage {

}

const page =
    new LoginPage();

page.openApplication();

Selenium Example

Reusable browser methods.

class Browser {

    launchBrowser() {

        console.log(
            "Launching browser."
        );

    }

}

class ChromeBrowser extends Browser {

}

const browser =
    new ChromeBrowser();

browser.launchBrowser();

Cypress Example

Common page actions.

class BaseCommands {

    visitHomePage() {

        console.log(
            "Visiting Home Page."
        );

    }

}

class DashboardPage extends BaseCommands {

}

const dashboard =
    new DashboardPage();

dashboard.visitHomePage();

API Testing Example

Reusable API methods.

class BaseApi {

    sendRequest() {

        console.log(
            "Sending API request."
        );

    }

}

class UserApi extends BaseApi {

}

const api =
    new UserApi();

api.sendRequest();

Data-Driven Testing Example

Reusable test utilities.

class BaseTest {

    loadTestData() {

        console.log(
            "Loading test data."
        );

    }

}

class LoginTest extends BaseTest {

}

const test =
    new LoginTest();

test.loadTestData();

Common Mistakes

Duplicating Code in Child Classes

Avoid rewriting functionality that already exists in the base class.


Creating Large Base Classes

Keep base classes focused on common functionality. Avoid adding unrelated methods.


Overriding Methods Unnecessarily

Only override a base class method when the child class needs different behavior.


Best Practices

  • Store common functionality in the base class.

  • Keep base classes generic.

  • Use inheritance to reduce duplicate code.

  • Override methods only when necessary.

  • Use meaningful class names.

  • Keep child classes focused on specialized behavior.

  • Design reusable class hierarchies.


Conclusion

Base classes are the foundation of abstraction and inheritance in Object-Oriented Programming. They provide reusable functionality that can be shared across multiple child classes, reducing duplication and improving maintainability.

For automation engineers, base classes are essential for building scalable automation frameworks. They centralize common browser actions, page interactions, API requests, and utility methods, making test scripts cleaner and easier to maintain.

Understanding base classes is an important step toward designing reusable and professional Node.js applications.


Frequently Asked Questions (FAQs)

What is a base class?

A base class is a parent class that provides common properties and methods for child classes.


Why are base classes important?

They reduce duplicate code, improve reusability, and simplify application design.


Can multiple child classes inherit from one base class?

Yes. Multiple child classes can inherit common functionality from the same base class.


Can child classes override base class methods?

Yes. Child classes can override inherited methods to provide specialized behavior.


Why are base classes useful in automation testing?

They provide reusable methods for browser operations, page interactions, API requests, test utilities, and other common framework functionality.


Key Takeaways

  • A base class is a parent class.

  • Base classes contain common functionality.

  • Child classes inherit properties and methods from the base class.

  • Base classes reduce duplicate code.

  • They improve code reusability and maintainability.

  • Child classes can override inherited methods.

  • Base classes are widely used in Playwright, Selenium, Cypress, and API testing frameworks.

  • Keep base classes generic and reusable.

  • Use inheritance to build scalable applications.

  • Base classes are a key component of abstraction in Node.js.