Enterprise Automation & Self-Healing Hub
Multi-Tenant Test Execution, Resilient 3-Tier Pipeline & Telemetry
Recent Execution Runs
0 Runs| RUN ID | PROJECT | TAGS | BROWSER | STATUS |
|---|---|---|---|---|
| No execution runs recorded yet. Launch a test suite to see live telemetry! | ||||
AI Healing Intelligence
Sub-millisecond local heuristic matching with Gemini 3.6 visual semantic reasoning.
1. Select Target Application
GEMINI_API_KEY, OPENAI_API_KEY) or project configuration.โ๏ธ Advanced Execution Settings (Pacing, Retries) Click to expand
2. Suite Feature Tree
Real-Time Scenario Stream
AI Self-Healing Notifications
Scenario Screenshots
0 ImagesTest Execution Runs
Showing 0 reportsLoading Execution Report...
Retrieving telemetry, scenario matrix, and step execution details.
Configured Test Credentials & Session Pool
| APPLICATION / PROJECT | USERNAME | ROLE | ENVIRONMENT | PASSWORD | STATUS | CONCURRENCY LEASE | NOTES / PURPOSE | ACTIONS |
|---|
๐ฏ Smart Test Impact Analysis (TIA) Impact Matrix
Git diff analysis correlates modified Java source files with impacted Cucumber scenarios & tags.
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.
Generate Scoped API Token
Configured Inbound CI/CD Webhooks
http://localhost:8080/api/v1/webhooks/github
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 LoadOffload 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.
config.properties (e.g. grid.url) are auto-detected upon onboarding!
๐ Schema Tables
๐ Query Results
Platform Configuration & Policies
Enterprise License Status
Available REST & SSE API Endpoints
/api/v1/projects โ Discovers all test projects, features, and tags./api/v1/runs/trigger โ Triggers an asynchronous test run with tags & browser options./api/v1/runs/stream?runId={id} โ Live SSE stream of logs, steps, and healing./api/v1/healing/records โ Retrieves historical healed elements with confidence scores./api/v1/healing/patch โ Invokes AST Java Source Patcher and opens Git PR./api/v1/users/pool โ Queries real-time status of multi-tenant credential locks./api/v1/users/release โ Force-releases leased test user accounts in the pool./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}'
Ensure all of the following are installed on your machine before proceeding:
~/.m2/settings.xml configurations.Choose your preferred onboarding method below:
.repo/ folder with zero external dependencies. Extract and run mvn test directly!
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.
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):
<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!
-javaagent:aspectjweaver argument is mandatory. Without it, AI self-healing aspects will not be woven at runtime and healing will be silently skipped.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
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.Create src/test/resources/config/config.properties. Below is the configuration from my-consumer-project:
# โโ 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:
# 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
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.-Dbrowser=chrome— overridesbrowserinconfig.properties-Dheadless=true— overridesheadlessinconfig.properties-Dcucumber.filter.tags="@Smoke"— overrides the default tag filter-Dai.provider=hybrid— dynamically sets the self-healing provider per run
- 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=pooland 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!
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.
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!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"));
}
}
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!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:
// 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();
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).
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!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);
}
}
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.
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):
{
"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"
}
}
{{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:
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);
}
}
Create your BDD feature files in src/test/resources/features/. Here is ConsumerLogin.feature from my-consumer-project:
@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:
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.");
}
}
@Smoke, @Regression, or @Admin. The Test Runner Studio displays these tags in a searchable multi-select dropdown for flexible execution.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:
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();
}
}
"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:
mvn clean test
mvn clean test -Dcucumber.filter.tags="@Smoke" -Dbrowser=chrome -Dheadless=true
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.
POST http://localhost:8080/api/v1/runs/trigger{"projectId":"my-consumer-project","tags":"@Smoke","browser":"chrome","headless":true}
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 Team Directory
Users scoped to your organization with granular role permissions.
| Username | Organization | Role | Status | Expiration Date | Last Login | Actions | |
|---|---|---|---|---|---|---|---|
| Loading users... | |||||||
| Timestamp | Actor | Role | Action | Target | Result | Details |
|---|---|---|---|---|---|---|
| Loading audit logs... | ||||||