Introducing CANDO-Test: A Framework for Structured UI Test Automation

When someone you love takes a leap into the unknown, you find yourself inspired to build bridges.
This framework was born out of one of those moments.

My wife made the courageous decision to reinvent her life and pursue a new career in Test Automation. She didn’t come from a QA or IT background, and the world of testing tools, code, and best practices was entirely new to her. I watched her face that challenge with frustration at times, but also with remarkable resilience. That “can-do” attitude sparked something in me.

What if I could create a clear, structured, and modular approach to UI automation—a set of guidelines and modular practices to help test engineers at any level build robust, maintainable, and scalable test systems with confidence?

That’s how CANDO-Test came to life.

CANDO-Test stands for:

  • CComponents: The reusable building blocks representing UI parts and their behavior.

  • AAssessment: Represents the evaluation logic—test cases designed to assess the system’s behavior under various scenarios.

  • NNetwork Emulation (formerly "Network Mocks"): Tools and structures to simulate real-world network behavior and responses.

  • DData Variant Creators: Utilities for generating diverse sets of test input data.

  • OObjects (Page Object & Page Object Builder): Abstractions representing pages and flows, encapsulating how users interact with the system.

Each part of the acronym reflects a fundamental concept in modern UI test automation. Together, they form a scalable approach that emphasizes clarity, modularity, reusability, and separation of concerns. CANDO-Test is not a framework locked into Playwright, Selenium, or Cypress. It's a mindset—a way to structure your test code no matter the tool you use.

The CANDO-Test Philosophy

To support this mission, the CANDO-Test framework was created as a set of modular building blocks to bring clarity and structure to UI automation efforts. Each part of the framework—Components, Assessment, Network Mocks, Data Variant Creators, and Page Objects—plays a unique role in isolating responsibilities, encouraging reusability, and enabling engineers to build resilient test systems with confidence.

Let’s explore what each of these elements means and how they work together:

Components

Is an abstraction that represents a distinct, reusable part of the user interface (UI) in the application. It encapsulates both the data (e.g., form fields values) and the actions (e.g., filling out a form, clicking buttons) related to that part of the UI. Components are used to interact with and verify behavior of specific UI elements.

Assessment

A self-contained, purpose-driven scenario or test goal. It defines the what and why of a test, leaving the how to lower layers like PageObjects and Components. An “Assessment” defines what you want to validate by combining data, mocks, and UI flows. It refers to a specific set of conditions and actions defined to verify the expected behavior of a system including the setup of necessary test data (such as data variants), interactions with the system (often through PageObjects or API calls), and the validation of outcomes. Implemented as “test case” that executes these steps and asserts that the actual results match the expected ones, ensuring the system behaves as intended under varios conditions.

NetworkMocks

It is responsable of constructs mocks for network requests (such as HTTP GET, POST, PUT, etc) to return predefined data or simulate different network behaviors )e.g., slow networks, timeouts, error response, etc). It provides a controlled environment by mocking network requests allowing tests to return predefined data.

Data Variant Creators

Is responsible for creating multiple variations or combinations of test data that will be used in testing. It handles the generation of different input values to test a wide range of scenarios and edge cases. It focuses on producing different sets of data that could be used across multiple test cases to test the system’s behavior under different conditions. It does not execute tests but is crucial for ensuring that various combinations of input data are tested.

Object (Page Object & Page Object Builder)

PageObjects

Is an object that helps to organize interactions with specific pages in the application. This object encapsulates actions such as filling out forms, navigation between steps, and verifying user interaction outputs. PageObject facade abstracts actions related to specific user journey, provides methods to coordinate components and verify page states.

PageBuilders

It is used to construct and initialize complex page objects. It allows a structured and flexile approach to create instances of page objects by assembling their components. The PageBuilder should be only used to manage dependencies between different parts of the page (components) and to simplify the setup of Assessments.

The PageObject and PageBuilder work together to provide a flexible and efficient approach to managing web page interactions in automated tests. While the PageObject handles the core functionality and logic, the PageBuilder simplifies the construction process, ensuring that the page object is instantiated with all necessary components, making the overall test setup more modular and easier to maintain.

Layered Architecture

The CANDO-Test framework follows a layered architecture to promote clean separation of concerns and composability:

  1. Foundation Layer

    • Components

    • Network Mocks

  2. Data Layer

    • Data Variant Creators
  3. Composition Layer

    • Page Objects & Page Object Builders
  4. Test Logic Layer

    • Assessment

This structure helps you go from atomic actions to complete test flows with clarity. Each layer builds on the previous one, creating a clean hierarchy that scales with your application.

Conclusion

“CANDO-Test” is more than a framework, it's a mindset for designing well-structured, maintainable, and scalable UI test automation systems.

As CANDO-Test focuses on architecture, does not matter whether you are just starting out or have years of experience in automation. It gives your test code a clean foundation, separates concerns, and encourages modular thinking. It's about building clarity into every layer of your test system, from atomic components to complex scenarios.

In a field where speed often trumps structure, CANDO-Test is a reminder that well-designed automation pays off with faster onboarding, easier maintenance, and more resilient tests.

Whether you're revamping a legacy test suite or setting a new standard for how UI testing should be done, the CANDO mindset helps you do it with confidence and with purpose.

My wife’s journey inspired this. Maybe it can help someone else’s journey too.

After all — you CANDO it.

1
Subscribe to my newsletter

Read articles from Max Martínez Cartagena directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Max Martínez Cartagena
Max Martínez Cartagena

I'm an enthusiastic Chilean software engineer in New Zeland. I mostly focus on the back-end of the systems. This is my site, Señor Developer, where I share my knowledge and experience.