Browser, Desktop & API automation powered by Chrome DevTools Protocol, Windows UI Automation, and SikuliX — with MCP servers for AI-driven control.
A unified toolkit covering browsers, desktops, APIs, and AI — no WebDriver required.
Direct Chrome DevTools Protocol over WebSocket. Navigate, click, type, screenshot — all without Selenium or WebDriver binaries.
Each test gets its own BrowserContext with separate cookies, storage, and cache — enabling safe parallel execution on a single browser instance.
CDP-based viewport recording to MJPEG AVI. Works in headless mode. Auto-attaches to reports on failure.
JSON-RPC 2.0 stdio servers let AI tools like Claude Desktop and Cursor drive browsers and desktops programmatically.
Windows UI Automation via a local W3C WebDriver server and client. Pure Java solution using JNA with COM virtual-table calls.
Detailed browser test execution tracing. Captures screenshots before/after actions, console logs, network requests, and test source code snippets.
SikuliX pattern matching for visual element interaction. Page Object annotation support with @FindPatternBy.
Apache HttpClient wrapper for GET, POST, PUT, DELETE with response parsing. Network interception via CDP's Fetch domain.
Natural-language element finding via Ollama LLM integration. Describe what you want, the AI finds it in the DOM.
Automated image comparison for visual regression testing. Automatically creates baselines on first run and generates diff images on failure.
Full CRUD operations (insert, find, update, delete, aggregation) with connection pooling, authentication support, and automatic resource management.
Full CRUD operations (insert, batch insert, find, update, delete, count) and generic parameterized SQL executions for JDBC-compliant databases (H2, MySQL, PostgreSQL, etc.).
JSON (Jackson), Excel (POI), PDF, file ops, checksums, logging (Log4j 2), and ExtentReports / ChainTest integration.
Programmatic execution of JMeter .jmx test plans via jmeter-java-dsl. Generate detailed HTML dashboards and raw JTL files directly within TestNG tests.
Seven focused packages, each with a clear responsibility.
CDP browser engine, driver, elements, WebSocket client, API interception
Browser & Sikuli MCP stdio servers, tool dispatchers, JSON-RPC
JNA-based W3C WebDriver server/client, window and element management, and control actions
SikuliX actions, screen factory, Page Object annotations
REST API executor and response wrapper
JSON, Excel, PDF, logging, reporting, video recording, MongoDB & SQL database utilities, and file operations
Sample page objects (Calculator) demonstrating framework usage
Launch Chrome automatically and get a ready-to-use driver. No WebDriver binary downloads, no path configuration — just call launchAndConnect() and start automating.
Wheel3 auto-discovers Chrome or Edge on your system, launches it with remote debugging on a free port, and returns a fully initialized driver.
// Launch Chrome automatically
ICdpDriver driver = CdpHandler.launchAndConnect();
driver.get("https://google.com");
// Find and interact with elements
ICdpElement searchBox = driver.findElement(
CdpBy.cssSelector("input[name='q']")
);
searchBox.sendKeys("Wheel3 automation");
// Take a screenshot
String base64 = driver.captureScreenshot();
driver.close();
Extend CdpTestBase and each test automatically gets its own BrowserContext — zero shared state, fully parallel-safe. One browser process, many isolated sessions.
public class MyTest extends CdpTestBase {
@Test
public void testIsolated() {
getDriver().get("https://example.com");
ICdpElement heading =
getDriver().findElement(
CdpBy.cssSelector("h1")
);
Assert.assertNotNull(heading.getText());
}
}
Control native Windows applications using a local W3C WebDriver server protocol. Find windows by title, interact with controls by automation ID, class name, or name — uses COM virtual-table calls via JNA.
W3CDriver desktop =
W3CDriver.getInstance();
W3CWindow notepad =
desktop.getWindow("Untitled - Notepad");
W3CBy editArea =
W3CBy.ByAutomationId("edit", "15");
W3CElement editor =
notepad.findElement(editArea);
editor.setEditBoxValue("Hello from Wheel3!");
notepad.maximizeWindow();
notepad.closeWindow();
Record browser operations into a .zip file containing interactive HTML, screenshots before/after actions, console logs, network request details, and source code context.
File traceZip = new File("target/traces/test_trace.zip");
driver.startTracing(traceZip);
driver.get("https://example.com");
ICdpElement link = driver.findElement(CdpBy.cssSelector("a"));
link.click();
driver.stopTracing();
Connect to MongoDB with automatic credential handling, insert and query documents, leverage aggregation pipelines, and rely on connection pooling for efficient resource management.
// Connect to MongoDB
MongoDBUtilities mongo = new MongoDBUtilities(
"mongodb://localhost:27017"
);
// Insert a document
mongo.insertOne("myDb", "users",
Map.of("name", "Alice", "age", 30)
);
// Query documents
List<Document> results = mongo.find(
"myDb", "users",
Filters.eq("age", 30)
);
// Update and close
mongo.updateOne("myDb", "users",
Filters.eq("name", "Alice"),
Updates.set("age", 31)
);
mongo.close();
Connect to any SQL database via JDBC connection strings. Perform CRUD operations using Java maps and run custom parameterized prepared statements with automatic resource cleanup.
// Connect to SQL DB
SQLDatabaseUtilities db = new SQLDatabaseUtilities(
"jdbc:h2:mem:testdb", "sa", ""
);
// Insert a row
db.insertOne("users",
Map.of("name", "Alice", "age", 30, "status", "active")
);
// Query rows
List<Map<String, Object>> results = db.find(
"users", "age = ?", 30
);
// Run prepared SQL execution
db.executeUpdate(
"UPDATE users SET status = ? WHERE name = ?",
"inactive", "Alice"
);
db.close();
Load and execute existing JMeter .jmx files programmatically from TestNG tests. Generates detailed HTML dashboards and raw JTL files dynamically in the build directory, and asserts success to fail CI runs on performance failures.
// Execute the JMX file and fail TestNG test on errors
TestPlanStats stats = JMeterRunner.run("src/test/resources/perf-test.jmx");
// Read statistical summaries
long totalRequests = stats.overall().samplesCount();
long failedRequests = stats.overall().errorsCount();
Duration p99 = stats.overall().sampleTimePercentile99();
| Category | Library | Version |
|---|---|---|
| Language | Java | 21 |
| Browser Automation | Chrome DevTools Protocol | Direct WebSocket |
| Desktop Automation | JNA Windows UI Automation | 5.14.0 |
| Image Automation | SikuliX | 2.0.5 |
| Visual Assertions | Image Comparison | 4.4.0 |
| HTTP Client | OkHttp | 5.3.2 |
| REST Client | Apache HttpClient | 4.5.14 |
| JMeter Automation | jmeter-java-dsl | 2.2 |
| Database (NoSQL) | MongoDB Driver (Sync) | 5.8.0 |
| Database (SQL) | H2 Database (test scope) | 2.4.240 |
| JSON | Jackson | 2.22.0 |
| XML / HTML | dom4j | 2.2.0 |
| Logging | Log4j 2 | 2.26.0 |
| Reporting | ExtentReports + ChainTest | 5.1.2 / 1.0.12 |
| Testing | TestNG | 7.12.0 |
| Build | Maven + GitHub Actions | CI/CD |
Install from GitHub Packages or build from source.
<repositories>
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/aji4032/Wheel3</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>io.github.aji4032</groupId>
<artifactId>Wheel3</artifactId>
<version>LATEST</version>
</dependency>
</dependencies>
git clone https://github.com/aji4032/Wheel3.git cd Wheel3 mvn clean package
Java 21+ • Maven 3.8+ • Windows (for desktop features) • Chromium browser (for CDP features)