Enterprise Automation & Self-Healing Hub

Multi-Tenant Test Execution, Resilient 3-Tier Pipeline & Telemetry

Gemini 3.6 + Heuristic
โšก Autonomous Quality Engineering

Zero-Downtime Autonomous Test Automation

Eliminate test flakiness with our 3-tier resilient execution engine and multi-provider AI self-healing with 1-click Git PR auto-patching.

TOTAL RUNS ๐Ÿงช
0
AI HEALED LOCATORS ๐Ÿง 
0
HOURS SAVED โฑ๏ธ
0.0 hrs
COST SAVED ๐Ÿ’ฐ
$0
FLAKINESS REDUCTION ๐Ÿ›ก๏ธ
99.4%

Recent Execution Runs

0 Runs
๐Ÿ”
RUN ID PROJECT TAGS BROWSER STATUS
No execution runs recorded yet. Launch a test suite to see live telemetry!
Showing 0-0 of 0 runs
Rows per page:
Page 1 of 1

AI Healing Intelligence

Sub-millisecond local heuristic matching with Gemini 3.6 visual semantic reasoning.

Offline Heuristic Engine0ms Latency
Levenshtein distance, DOM tree proximity, and attribute scoring.
Google Gemini 3.6 Flash99.2% Accuracy
Semantic reasoning, visual context, and DOM tree token analysis.
AST Java Source PatcherAutomated PRs
Direct Java source rewriter with isolated branch creation.

1. Select Target Application

๐Ÿ”’ In-Memory Only ยท 0% DB/Disk Persistence
Leaves empty to inherit from server environment variables (GEMINI_API_KEY, OPENAI_API_KEY) or project configuration.
โš™๏ธ Advanced Execution Settings (Pacing, Retries) Click to expand

2. Suite Feature Tree

RUNNING โฑ๏ธ Active
Execution Trace Stream
No active log output. Launch a test to stream real-time logs.

Real-Time Scenario Stream

No scenario lifecycle events yet.

AI Self-Healing Notifications

All locators healthy. AI engine standing by.

Scenario Screenshots

0 Images
No scenario visual artifacts recorded.
๐Ÿ“Š Scenario Matrix, Pass/Fail Diagnostics & Visual Evidence
TOTAL EXECUTIONS๐Ÿงช
0
TOTAL SCENARIOS๐Ÿ“‘
0
OVERALL PASS RATE๐Ÿ“Š
100%
AI HEALS APPLIEDโšก
0

Test Execution Runs

Showing 0 reports
Rows per page:
Page 1 of 1
๐Ÿ“Š

Loading Execution Report...

Retrieving telemetry, scenario matrix, and step execution details.

Execution Run / Project: ๐Ÿ™ SCM: DETECTING...
APPLICATION / SUITE:
SESSION MODE:
ROLE:
SESSION MODE
POOL MODE
TOTAL CONFIGURED USERS
0
AVAILABLE LEASES
0
ACTIVE LEASE LOCKS
0

Configured Test Credentials & Session Pool

Accounts are dynamically leased by threads during parallel execution to prevent session collision.
APPLICATION / PROJECT USERNAME ROLE ENVIRONMENT PASSWORD STATUS CONCURRENCY LEASE NOTES / PURPOSE ACTIONS
TOTAL SNAPSHOTS TRACKED๐Ÿ“ธ
0
IDENTICAL MATCHESโœ“
0
VISUAL DRIFTS DETECTEDโš ๏ธ
0
APPROVED BASELINES๐ŸŒŸ
0
APPLICATION / PROJECT:
APPLICATION / PROJECT: BASE BRANCH:
SMART TIA TIME SAVINGSโšก
75.0%
FAILURE ROOT CAUSE CLUSTERS๐Ÿ”
0 Categories
LOCATOR HEALTH INDEX๐Ÿ›ก๏ธ
97.2%

๐ŸŽฏ Smart Test Impact Analysis (TIA) Impact Matrix

Git diff analysis correlates modified Java source files with impacted Cucumber scenarios & tags.

Analyzing Git diff and impacted Cucumber features...

AI Failure Pattern Clusters

Grouped by normalized stack trace signatures and error categories.

Locator Stability & Decay Matrix

Longitudinal reliability tracking to identify volatile dynamic IDs.

๐Ÿ”‘ Your SDK Access Key

Active

Use this access key in config.properties for local test runners and CI/CD pipelines. If already generated, your key is preserved below.

๐Ÿ™ Project Git & SCM Connections

Configure GitHub / GitLab credentials to automatically push self-healed locators and open real Pull Requests.

SELECT PROJECT

Generate Scoped API Token

Configured Inbound CI/CD Webhooks

POST http://localhost:8080/api/v1/webhooks/github
POST http://localhost:8080/api/v1/webhooks/generic

Configure this webhook URL in GitHub Settings > Webhooks on pull_request and push events to enable automatic TIA testing and PR bot reporting.

Active API Security Tokens

NAME ROLE TOKEN MASK CREATED STATUS ACTION

๐Ÿ”Œ Remote Environment Connections

Zero Server Load

Offload heavy browser test sessions directly to remote infrastructure (Selenium Grid 4 clusters, Docker nodes, Cloud Providers, or CI/CD runners). The central server remains lightweight (~10MB RAM) for AI healing, telemetry ingestion, and reporting.

Total Connections
0
Online & Reachable
0
Auto-Detected from Config
0
Organization Scope
org_default
๐Ÿ’ก Connections defined in consumer config.properties (e.g. grid.url) are auto-detected upon onboarding!
ACTIVE ENGINE
DETECTING...
CONNECTION POOL
0 / 10
QUERIES EXECUTED
0
SCHEMA TABLES
0

๐Ÿ“ Schema Tables

Loading tables...
โšก Quick Templates:
Press Ctrl+Enter to execute SQL query.

๐Ÿ“Š Query Results

๐Ÿ”
No Query Executed
Type a SQL query or pick a quick template and click Run Query.

Platform Configuration & Policies

Enterprise License Status

TIER: Enterprise License
HOLDER: Evaluation Licensee
VALIDITY: Active (30 days remaining)
ENTITLED FEATURES:
โœ“ AI Self-Healing โœ“ 3-Tier Resilient Actions โœ“ AST Git Auto-Patcher โœ“ Playwright Engine โœ“ Multi-User Pool

Available REST & SSE API Endpoints

GET /api/v1/projects โ€” Discovers all test projects, features, and tags.
POST /api/v1/runs/trigger โ€” Triggers an asynchronous test run with tags & browser options.
GET /api/v1/runs/stream?runId={id} โ€” Live SSE stream of logs, steps, and healing.
GET /api/v1/healing/records โ€” Retrieves historical healed elements with confidence scores.
POST /api/v1/healing/patch โ€” Invokes AST Java Source Patcher and opens Git PR.
GET /api/v1/users/pool โ€” Queries real-time status of multi-tenant credential locks.
POST /api/v1/users/release โ€” Force-releases leased test user accounts in the pool.
GET /api/v1/license โ€” Checks cryptographic RSA license validity and feature tier.

CI/CD Integration Example (cURL)

curl -X POST http://localhost:8080/api/v1/runs/trigger \
  -H "Content-Type: application/json" \
  -d '{"projectId":"my-consumer-project","tags":"@Admin","browser":"chrome","headless":true}'
📖 Getting Started Guide
Step-by-step: Create your first AI-powered automation project
Ready-to-Run Starter Project Instant Setup
Skip manual configuration — download a complete, pre-tested consumer project with POM, Page Objects, BDD Features, and AI Self-Healing pre-wired.
โœจ Zero Configuration: The downloaded starter suite includes the pre-bundled SDK in .repo/ and your active 30-day access key in config.properties. Simply extract and run mvn test!
1

Prerequisites & Platform Setup

Install the required tools before creating your automation project.
Required

Ensure all of the following are installed on your machine before proceeding:

Java JDK
Version 17 or higher required
Apache Maven
Version 3.8.x or higher
🌐
Google Chrome
Latest stable version
📦
Core Engine SDK
Zero tokens / Zero settings.xml
ℹ️
Zero External Token & Zero Settings File Dependency: The platform is designed for instant onboarding without requiring GitHub Personal Access Tokens (PATs) or ~/.m2/settings.xml configurations.

Choose your preferred onboarding method below:

✔️ Option A: Download Starter Project (Recommended)
Click Download Starter Project (.zip) in the banner above. The downloaded suite pre-bundles the obfuscated SDK in an embedded .repo/ folder with zero external dependencies. Extract and run mvn test directly!
📦 Option B: Local Maven Repository Cache
If building from the platform repository, run mvn clean install -DskipTests to install ai-automation-core-1.0.0.jar into your local ~/.m2/repository. No settings.xml or remote credentials needed.
2

Create the Maven Project

Set up pom.xml with the Core SDK dependency and required plugins.
Required

Configure your project's pom.xml with the following reference structure based on my-consumer-project (or click Download Starter Project (.zip) in the banner above to skip manual file creation):

pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.mycompany</groupId>
    <artifactId>ecommerce-test-automation</artifactId>
    <version>1.0.0</version>
    <name>Sample E-Commerce Consumer Test Project</name>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <thread.count>2</thread.count>
        <aspectj.version>1.9.22</aspectj.version>
        <allure.version>2.27.0</allure.version>
    </properties>

    <repositories>
        <!-- Pre-bundled local repository: Zero GitHub auth or settings.xml required -->
        <repository>
            <id>healqa-local-repo</id>
            <name>HealQA Embedded Core Repository</name>
            <url>file://${project.basedir}/.repo</url>
            <releases>
                <enabled>true</enabled>
                <checksumPolicy>ignore</checksumPolicy>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

    <dependencies>
        <!-- AI-Powered Automation Framework Core SDK Dependency -->
        <dependency>
            <groupId>com.automation</groupId>
            <artifactId>ai-automation-core</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.13.0</version>
                <configuration>
                    <release>17</release>
                </configuration>
            </plugin>
            <!-- Maven Surefire with AspectJ for AI Healing -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.2.5</version>
                <configuration>
                    <testFailureIgnore>true</testFailureIgnore>
                    <argLine>
                        -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
                    </argLine>
                    <properties>
                        <property>
                            <name>listener</name>
                            <value>com.automation.listeners.AnnotationTransformer</value>
                        </property>
                    </properties>
                    <includes>
                        <include>**/*Runner.java</include>
                    </includes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

๐Ÿ’ก Note: If you installed the Core SDK into your local Maven cache via mvn clean install -DskipTests, Maven automatically resolves ai-automation-core directly from ~/.m2/repository without needing any <repositories> block or settings.xml file!

⚠️
The -javaagent:aspectjweaver argument is mandatory. Without it, AI self-healing aspects will not be woven at runtime and healing will be silently skipped.
3

Project Directory Structure

Organise your source files following the reference project layout.
Required

Create the following directory structure. This mirrors the my-consumer-project layout โ€” the Core SDK discovers your page objects, features, and configuration automatically based on these conventions:

my-consumer-project/
├── src/
│   └── test/
│       ├── java/
│       │   └── com/mycompany/tests/
│       │       ├── pages/                 # Page Objects (extend BasePage)
│       │       ├── stepdefinitions/       # Cucumber Glue Code (@Given/@When/@Then)
│       │       └── runners/               # ConsumerTestRunner (Cucumber + TestNG)
│       └── resources/
│           ├── config/
│           │   ├── config.properties      # Execution, timeouts, AI healing settings
│           │   └── qa.properties          # Single base.url & fallback user.pool
│           ├── features/
│           │   └── ConsumerLogin.feature  # Gherkin BDD scenarios
│           └── data/
│               └── admin-filters.json     # Optional JSON test data
└── pom.xml                        # Maven POM with GitHub Packages repo & ai-automation-core
💡
The element-healing-history.json file is automatically created in target/ or src/main/resources/locators/ by the SDK when AI healing first executes. You do not need to create it manually.
4

Configure config.properties & Single Application URL

Master configuration, single base URL, and runtime parameter overrides.
Required

Create src/test/resources/config/config.properties. Below is the configuration from my-consumer-project:

src/test/resources/config/config.properties
# โ”€โ”€ 1. Core Execution & Browser Settings โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
browser=chrome
headless=true
execution.mode=local         # local | remote
thread.count=3
environment=qa               # loads config/qa.properties for URLs
test.retry.count=1
execution.delay.ms=300

# โ”€โ”€ 2. Timeouts & Polling โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
timeout.explicit=20
timeout.implicit=0
timeout.pageload=60
timeout.retry.count=3
timeout.polling.ms=500

# โ”€โ”€ 3. Remote Grid & Cloud Platforms โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
grid.url=http://localhost:4444/wd/hub
cloud.provider=              # browserstack | saucelabs | lambdatest
cloud.username=
cloud.accesskey=

# โ”€โ”€ 4. AI Self-Healing Engine Settings โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
ai.healing.enabled=true
ai.healing.provider=hybrid   # heuristic | gemini | openai | claude | ollama | hybrid
ai.healing.confidence.threshold=0.70
ai.runtime.healing.enabled=true

# Google Gemini (if provider=gemini or hybrid)
ai.gemini.api.key=           # or set GEMINI_API_KEY env var
ai.gemini.model=gemini-2.0-flash

# Local Ollama (zero cost, air-gapped)
ai.ollama.base.url=http://localhost:11434
ai.ollama.model=deepseek-r1:8b

# โ”€โ”€ 5. Dashboard Live Telemetry โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
ai.telemetry.enabled=true
ai.telemetry.url=http://localhost:8080/api/telemetry/report
dashboard.telemetry.enabled=true
dashboard.telemetry.url=http://localhost:8080/api/telemetry/report

# โ”€โ”€ 6. Git Auto-Patch โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
ai.autopatch.enabled=false
ai.autopatch.auto.branch=true
ai.autopatch.branch.prefix=ai-heal/patch-
ai.autopatch.git.commit=true
ai.autopatch.create.pr=false

Next, create src/test/resources/config/qa.properties with your application's base URL and fallback user pool:

src/test/resources/config/qa.properties
# QA Environment Settings for Consumer Tests
# --------------------------------------------------------
base.url=https://example.com/login
api.url=https://example.com/api
# Dynamic multi-user concurrency pool
user.pool=Admin:admin123:admin,Admin2:admin123:admin,Admin3:admin123:admin
🌐
One Application URL is Sufficient: You do not need to configure separate URLs for login, dashboard, leave, etc. A single base.url pointing to your entry portal (e.g. https://example.com/login) is all the framework requires. Page objects authenticate and navigate from this unified entry point.
Platform Parameter Overrides: When you trigger runs from the Test Runner Studio or the REST API, the platform dynamically passes JVM system properties to Maven that override local settings:
  • -Dbrowser=chrome — overrides browser in config.properties
  • -Dheadless=true — overrides headless in config.properties
  • -Dcucumber.filter.tags="@Smoke" — overrides the default tag filter
  • -Dai.provider=hybrid — dynamically sets the self-healing provider per run
👥
User Session Pool Dynamic Overrides: When running tests from the platform dashboard, the built-in User Session Pool (sidebar: User Session Pool) takes precedence:
  • Active credentials registered for your project in the platform database are automatically injected at launch via -Duser.pool="Admin:admin123:admin,...".
  • The platform passes -Duser.session.mode=pool and manages concurrent thread leases, unlocking sessions automatically when the test run completes.
  • This completely overrides the static credentials in qa.properties, guaranteeing zero collision between parallel test scenarios!
5

Page Objects & AI Element Registration (BasePage)

Extend BasePage, register elements with semantic descriptions for autonomous AI healing, and bind typed UI components.
Required

All page objects in consumer projects inherit from com.automation.pages.BasePage. The Core SDK manages WebDriver lifecycle, pre-flight hydration checks, and AI self-healing behind this abstraction.

ℹ️
Why Semantic Descriptions Matter: The 2nd parameter of register(key, description, By locator) is the semantic purpose of the element. When an element locator breaks (due to dynamic IDs, CSS restructuring, or framework changes), the AI Self-Healing engine reads this semantic description along with current DOM snapshots to autonomously discover and heal the broken locator!
src/test/java/com/mycompany/tests/pages/ConsumerLoginPage.java
package com.mycompany.tests.pages;

import com.automation.components.ButtonComponent;
import com.automation.pages.BasePage;
import org.openqa.selenium.By;

/**
 * Consumer Project Page Object:
 * Extends BasePage from Core SDK and binds typed UI Components!
 */
public class ConsumerLoginPage extends BasePage {

    // Declare high-level typed UI component wrappers
    public ButtonComponent loginBtn;

    public ConsumerLoginPage() {
        // Pass page name to super โ€” used across AI healing audit logs and telemetry
        super("ConsumerLoginPage");
    }

    @Override
    protected void initElements() {
        // Syntax: register(uniqueKey, semanticDescriptionForAI, By locator)
        register("username", "Username text input field", By.name("username"));
        register("password", "Password text input field", By.name("password"));
        register("loginBtn", "Login submit button", By.cssSelector("button[type='submit']"));
        register("forgotPasswordLink", "Forgot your password link on login page",
            By.xpath("//a[contains(@href,'forgot')] | //*[contains(normalize-space(),'Forgot your password?')]"));

        // Wrap raw PageElement into an SDK typed component (ButtonComponent, SelectComponent, etc.)
        loginBtn = initComponent(ButtonComponent.class, getElement("loginBtn"));
    }

    public void login(String username, String password) {
        sendKeys(getElement("username"), username);
        sendKeys(getElement("password"), password);
        click(getElement("loginBtn"));
    }

    public void clickForgotPassword() {
        click(getElement("forgotPasswordLink"));
    }
}
💡
Pre-Flight Element Validation & Self-Healing: You can call validateAndHealPageElements() on any page object. It scans all registered elements against the current DOM on page load, proactively repairing broken locators before test steps interact with them!
6

Supported Selenium & 3-Tier Resilient Operations

Complete reference for clicks, typing, text extraction, mouse actions, and typed components with automatic resilience fallbacks.
Reference

Standard Selenium interactions often fail due to animations, sticky headers, dynamic SPA re-rendering, or obscure click targets. The Core SDK solves this with an automatic 3-Tier Resilient Action Engine:

Operation Method Syntax Multi-Tier Fallback Pipeline
Resilient Click click(getElement("btn"))
ElementActions.click(By)
Tier 1 (Native): Auto-scroll into view + optional highlight + element.click().
Tier 2 (Mouse Actions): Actions.moveToElement(el).pause(100ms).click() (bypasses overlays & sticky headers).
Tier 3 (JavaScript): Synthetic DOM click event dispatch (recovers from obscured elements).
Resilient SendKeys sendKeys(getElement("input"), text)
ElementActions.sendKeys(By, text)
Tier 1 (Native): Auto-scroll + highlight + clear + element.sendKeys(text).
Tier 2 (Mouse Actions): Focus via click → Ctrl+A → Backspace → Actions typing.
Tier 3 (JavaScript): Sets el.value and dispatches synthetic input, change, and blur events (bypasses React/Angular masks).
Resilient GetText getText(getElement("header"))
ElementActions.getText(By)
4-Tier Fallback: element.getText()getAttribute("value")getAttribute("textContent")getAttribute("innerText") or placeholder.
Safe Visibility isDisplayed(getElement("logo")) Safe boolean check that suppresses NoSuchElementException / StaleElementReferenceException and returns false instead of failing.
Explicit Waits waitForVisibility(el, 15)
waitForClickable(el, 15)
Smart polling with automatic spinner and progress overlay waiting (WaitUtils.waitForSpinnersToDisappear()).
Advanced Mouse Actions ActionUtils.hover(el)
ActionUtils.doubleClick(el)
ActionUtils.rightClick(el)
ActionUtils.dragAndDrop(src, tgt)
High-level mouse interactions with automatic JavaScript fallback for hover menus, context menus, and drag-and-drop targets.
Navigation & Hydration ElementActions.navigateToUrl(url) Waits for universal DOM and SPA hydration. Automatically triggers self-recovery reload if the initial page render is blank.

Typed Enterprise UI Components

Instead of manual locator chaining, bind elements to pre-built components that encapsulate complex interactions:

UI Component Methods Reference
// SelectComponent (Standard & Custom Searchable Dropdowns)
SelectComponent roleSelect = initComponent(SelectComponent.class, getElement("roleSelect"));
roleSelect.selectByVisibleText("Admin");
roleSelect.selectByValue("1");
List<String> allRoles = roleSelect.getOptions();

// CheckboxComponent
CheckboxComponent agreeTerms = initComponent(CheckboxComponent.class, getElement("agreeCheckbox"));
agreeTerms.check();
agreeTerms.uncheck();
boolean isChecked = agreeTerms.isChecked();

// DatePickerComponent
DatePickerComponent hireDate = initComponent(DatePickerComponent.class, getElement("hireDatePicker"));
hireDate.selectDate("2026-09-06");

// ModalComponent
ModalComponent confirmModal = initComponent(ModalComponent.class, getElement("deleteConfirmModal"));
confirmModal.confirm();
confirmModal.dismiss();
String title = confirmModal.getTitle();
7

Thread-Safe Cross-Step State Sharing (ScenarioContext)

Safely share dynamic test data between Cucumber steps in parallel execution threads without collision.
Architecture

In Cucumber BDD, step definition instances are recreated across steps. Storing state in static class variables causes catastrophic test pollution when scenarios run concurrently across multiple threads (e.g. thread.count=3).

🔒
ThreadLocal Isolation & Auto-Cleanup: com.automation.data.ScenarioContext provides thread-safe key-value storage bound strictly to the current thread. The platform's CucumberHooks automatically clears the context at the end of each scenario, ensuring zero state leaks between runs!
Passing Dynamic State Across Steps Example
package com.mycompany.tests.stepdefinitions;

import com.automation.data.DataGenerator;
import com.automation.data.ScenarioContext;
import com.automation.utils.Log;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;
import org.testng.Assert;

public class CrossStepStateDemoSteps {

    // โ”€โ”€ STEP 1: Generate dynamic runtime data and store in ScenarioContext โ”€โ”€
    @Given("I generate a dynamic employee profile with random synthetic data")
    public void generateDynamicData() {
        String randomName = DataGenerator.randomFullName();
        String randomEmail = DataGenerator.randomEmail("company.com");
        String randomEmpId = DataGenerator.randomNumeric(6);

        Log.info("Generated Employee: " + randomName + " (" + randomEmpId + ")");

        // Store into ThreadLocal ScenarioContext
        ScenarioContext.set("employeeName", randomName);
        ScenarioContext.set("employeeEmail", randomEmail);
        ScenarioContext.set("employeeId", randomEmpId);
    }

    // โ”€โ”€ STEP 2: Retrieve the data in a subsequent step and use it โ”€โ”€
    @When("I search for the newly created employee")
    public void searchEmployee() {
        // Retrieve string values stored by previous steps
        String empName = ScenarioContext.getString("employeeName");
        String empId = ScenarioContext.getString("employeeId");

        Assert.assertNotNull(empName, "employeeName missing in ScenarioContext!");
        Log.info("Searching for employee by name: " + empName + " and ID: " + empId);
        
        // Use with Page Object
        // directoryPage.searchByName(empName);
    }

    // โ”€โ”€ STEP 3: Validate results using the stored context state โ”€โ”€
    @Then("I verify the employee details match the generated profile")
    public void verifyEmployeeDetails() {
        String expectedEmail = ScenarioContext.getString("employeeEmail");
        Assert.assertTrue(ScenarioContext.contains("employeeEmail"), "Key not found!");
        Log.info("Verified active employee email against ScenarioContext: " + expectedEmail);
    }
}
8

Data-Driven Testing & JSON Management (TestDataManager)

Zero-POJO JSON test data management with environment awareness and dynamic synthetic token replacement.
Architecture

Instead of hardcoding test data in feature files or writing cumbersome Java POJO mapping classes for every JSON payload, the Core SDK provides com.automation.data.TestDataManager.

📁
Environment-Aware Resolution: The SDK automatically checks src/test/resources/data/{environment}/*.json based on your active environment (e.g. environment=qa in config.properties). If an environment-specific override is not present, it seamlessly falls back to src/test/resources/data/*.json.

1. Create JSON Test Data: Place test data files under src/test/resources/data/ (e.g. user-profiles.json):

src/test/resources/data/user-profiles.json
{
  "activeAdmin": {
    "role": "Admin",
    "status": "Enabled",
    "username": "admin_user",
    "email": "{{random_email}}",
    "notes": "Automated test administrator account"
  },
  "standardUser": {
    "role": "ESS",
    "status": "Enabled",
    "username": "standard_user",
    "email": "{{random_email}}",
    "notes": "Standard employee self-service profile"
  }
}
Synthetic Dynamic Tokens: Tokens like {{random_email}}, {{random_name}}, {{random_phone}}, {{random_id_6}}, {{timestamp}}, and {{uuid}} are dynamically generated at runtime. Every test run receives fresh, non-colliding test values!

2. Consume in Step Definitions: Use TestData for zero-boilerplate field access or fetch dot-notated keys directly:

Consuming JSON Test Data in Step Definitions
package com.mycompany.tests.stepdefinitions;

import com.automation.data.ScenarioContext;
import com.automation.data.TestData;
import com.automation.data.TestDataManager;
import com.automation.utils.Log;
import io.cucumber.java.en.Given;

public class DataDrivenStepDefinitions {

    @Given("I apply the user profile {string} from JSON test data")
    public void applyUserProfile(String profileKey) {
        // 1. Dynamic TestData container - Zero POJOs required!
        // Format: TestDataManager.getData("filename.key")
        TestData profile = TestDataManager.getData("user-profiles." + profileKey);
        
        String role = profile.getString("role");
        String status = profile.getString("status");
        String email = profile.getString("email"); // {{random_email}} is already resolved!

        Log.info("Loaded JSON test data: role=" + role + ", email=" + email);

        // Combine with ScenarioContext for cross-step sharing
        ScenarioContext.set("activeRole", role);
        ScenarioContext.set("activeEmail", email);

        // 2. Direct dot-path value access is also supported
        String notes = TestDataManager.getString("user-profiles." + profileKey + ".notes");
        Log.info("Profile notes: " + notes);
    }
}
9

Write Feature Files & Step Definitions

Author Gherkin BDD scenarios and wire them to Java step definitions.
Required

Create your BDD feature files in src/test/resources/features/. Here is ConsumerLogin.feature from my-consumer-project:

src/test/resources/features/ConsumerLogin.feature
@ConsumerSuite @Smoke
Feature: Consumer Application Login and Portal Access

  Scenario: Consumer test successfully logs into portal using Core SDK
    Given I acquire a consumer user with role "admin"
    When I navigate to the application portal
    And the AI pre-flight agent validates consumer page elements
    And I perform login using consumer credentials
    Then I should see the dashboard loaded successfully
    And the AI element healing JSON report should be generated in the consumer project

Wire each Gherkin step to a Java method in ConsumerLoginSteps.java. Notice how UserManager.getUser(role) acquires the dynamically leased user from the platform User Pool, and how ConfigReader.get("base.url") navigates to the single base URL:

src/test/java/com/mycompany/tests/stepdefinitions/ConsumerLoginSteps.java
package com.mycompany.tests.stepdefinitions;

import com.automation.config.ConfigReader;
import com.automation.users.User;
import com.automation.users.UserManager;
import com.automation.utils.ElementActions;
import com.automation.utils.Log;
import com.mycompany.tests.pages.ConsumerDashboardPage;
import com.mycompany.tests.pages.ConsumerLoginPage;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;
import org.testng.Assert;

public class ConsumerLoginSteps {

    private final ConsumerLoginPage loginPage = new ConsumerLoginPage();
    private final ConsumerDashboardPage dashboardPage = new ConsumerDashboardPage();
    private User currentUser;

    @Given("I acquire a consumer user with role {string}")
    public void acquireConsumerUser(String role) {
        // Leases a credential from the platform's dynamic User Session Pool!
        currentUser = UserManager.getUser(role);
        Log.info("Consumer test leased user: " + currentUser.username());
    }

    @When("I navigate to the application portal")
    public void navigateToPortal() {
        // Navigates directly using the single configured base.url
        String baseUrl = ConfigReader.get("base.url");
        ElementActions.navigateToUrl(baseUrl);
    }

    @When("the AI pre-flight agent validates consumer page elements")
    public void validateConsumerPageElements() {
        loginPage.validateAndHealPageElements();
    }

    @When("I perform login using consumer credentials")
    public void performLogin() {
        loginPage.login(currentUser.username(), currentUser.password());
    }

    @Then("I should see the dashboard loaded successfully")
    public void verifyDashboard() {
        Assert.assertTrue(dashboardPage.isDashboardLoaded(), "Dashboard failed to load!");
        Log.info("Consumer scenario successfully validated dashboard!");
    }

    @Then("the AI element healing JSON report should be generated in the consumer project")
    public void verifyConsumerJsonReport() {
        com.automation.ai.HealingAuditLogger.exportJsonReport();
        Log.info("Exported element healing JSON report.");
    }
}
💡
Use descriptive Cucumber tags such as @Smoke, @Regression, or @Admin. The Test Runner Studio displays these tags in a searchable multi-select dropdown for flexible execution.
10

Create the Test Runner

Wire Cucumber with TestNG and enable parallel scenario execution.
Required

The test runner class is the execution entry point for Maven Surefire. It wires your feature files, glue packages, and lifecycle hooks together. Here is ConsumerTestRunner.java from my-consumer-project:

src/test/java/com/mycompany/tests/runners/ConsumerTestRunner.java
package com.mycompany.tests.runners;

import com.automation.config.ConfigReader;
import io.cucumber.testng.AbstractTestNGCucumberTests;
import io.cucumber.testng.CucumberOptions;
import org.testng.ITestContext;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.DataProvider;

@CucumberOptions(
    features = "src/test/resources/features",
    glue = {
        "com.mycompany.tests.stepdefinitions",  // your step definitions package
        "com.automation.hooks"                  // Core SDK lifecycle & telemetry hooks (MANDATORY)
    },
    plugin = {
        "pretty",
        "html:target/cucumber-reports/cucumber-pretty.html",
        "io.qameta.allure.cucumber7jvm.AllureCucumber7Jvm"
    },
    monochrome = true
)
public class ConsumerTestRunner extends AbstractTestNGCucumberTests {

    @BeforeTest(alwaysRun = true)
    public void setupSuite(ITestContext context) {
        int threads = ConfigReader.getInt("thread.count", 2);
        context.getSuite().getXmlSuite().setDataProviderThreadCount(threads);
    }

    @Override
    @DataProvider(parallel = true)  // Enables concurrent scenario execution
    public Object[][] scenarios() {
        return super.scenarios();
    }
}
⚠️
Critical: Always include "com.automation.hooks" in the glue array. This package contains the SDK's @Before/@After hooks that initialise the WebDriver, lease user pool sessions, inject AI self-healing, and flush telemetry to the platform.

Run your test suite from the terminal:

Terminal โ€” Run all tests
mvn clean test
Terminal โ€” Run with tag & parameter overrides
mvn clean test -Dcucumber.filter.tags="@Smoke" -Dbrowser=chrome -Dheadless=true
11

Register Your Project & Run from Dashboard

Onboard your project into AI AutoStudio and launch tests with live telemetry streaming.
Final Step

Once your project compiles (mvn clean test-compile), onboard it in the platform to take full advantage of User Session Pools, AI Healing, and real-time execution streaming:

Set up Test Credentials: Navigate to User Session Pool in the sidebar. Register accounts for your application (e.g. Admin / admin123 with role admin). The platform will automatically lease these accounts to your tests at runtime, overriding static config properties.

Onboard Project: Navigate to Settings & License. Click ⋮ Onboard New Application. Enter your project folder path and set your application entry URL.

Select Suite & Tags: Switch to Test Runner Studio. Select your project in the dropdown to auto-discover all feature files and tags.

Customize & Launch: Pick your target browser, toggle headless mode, select tags, and click ▶ Launch Suite. Notice that the platform passes your selected browser and User Pool credentials as runtime overrides.

Watch Real-Time Stream: Switch to Live Mirror & Logs to watch SSE real-time console streaming and AI healing operations. When execution finishes, inspect full diagnostics in Test Reports & Analytics and AI Healing Studio.

💡
You can also trigger runs programmatically via the REST API with runtime overrides:

POST http://localhost:8080/api/v1/runs/trigger
{"projectId":"my-consumer-project","tags":"@Smoke","browser":"chrome","headless":true}
📚
Working Reference Project: A complete working reference implementation is available by clicking Download Starter Project (.zip) above.
๐Ÿ‘‘ Super Administrator Scope

Platform Governance & Multi-Tenant Organizations

Manage customer organizations, trial periods, global quotas, and system-wide feature entitlements.

ORGANIZATIONS๐Ÿข
1
PLATFORM USERS๐Ÿ‘ฅ
3
SYSTEM FEATURESโšก
9
AI OPERATIONS๐Ÿง 
0

Registered Organizations & Customer Accounts

Manage tenant limits, trial expiration dates, and subscription tiers.

Organization ID Name Plan Type Status Trial Period Quotas (Users/Proj/AI) Actions
Loading organizations...

Global Platform Features & Capabilities

Master catalog of platform features available for tenant entitlement assignment.

Feature ID Feature Name Category Description Status
Loading features...
๐Ÿข Organization Management

Team Members & Role-Based Access Control

Provision test engineers, manage account expiration dates, assign roles, and revoke credentials.

Organization Team Directory

Users scoped to your organization with granular role permissions.

Username Email Organization Role Status Expiration Date Last Login Actions
Loading users...
๐Ÿ“œ Compliance & Security

Tamper-Evident Platform Audit Trail

Forensic log of logins, administrative changes, feature toggles, and critical platform operations.

Showing latest entries
Timestamp Actor Role Action Target Result Details
Loading audit logs...