A
assertum
Now with MCP support for AI agents

Native UI tests.
Generated by AI.
Actually stable.

Assertum records your UI flows and generates production-ready native tests — complete with Screen Objects, Step functions and self-healing — for Android, Compose Multiplatform, iOS and Web.

Screen ObjectsStep FunctionsSelf-HealingMCP for AI AgentsAndroid · iOS · Web
Assertum Studio

// Generated test

@Test fun loginFlow() {

onView(withId(R.id.email))

.perform(typeText("user@test.com"))

onView(withId(R.id.loginBtn))

.perform(click())

}

Features

Beyond prompt-and-pray testing

Traditional AI-generated tests are brittle because they describe the UI from the outside. Assertum understands your app from within — and generates code you'd actually write yourself.

UI Recorder

Record user flows directly in your app. Assertum captures every interaction and maps it to real UI elements — no manual script writing needed.

New

MCP for AI Agents

Expose your full UI element tree to AI agents via MCP. Agents inspect, interact, and generate tests autonomously — far beyond screenshot-based approaches.

Page & Screen Objects

Assertum automatically generates Page Object / Screen Object classes — the industry standard pattern that keeps test logic clean, reusable and decoupled from implementation details.

Step Functions

High-level step functions wrap repeated interactions into named, composable building blocks. Tests become readable by humans, duplication drops to zero.

Self-Healing Tests

When your product UI changes, Assertum detects broken selectors and repairs them automatically — keeping your test suite green without manual intervention.

Best Practices by Default

Every generated test follows modern standards: semantic IDs over XPath, proper assertions, isolated test state. Code you'd be proud to review.

CheckoutScreen.kt · generated by Assertum
// ✦ Assertum generates Screen Objects automaticallyclass CheckoutScreen(private val device: UiDevice) {    fun enterPromoCode(code: String) = apply {        promoCodeField.perform(typeText(code))    }    fun tapPlaceOrder() = apply {        placeOrderButton.perform(click())    }    fun assertOrderConfirmed() {        onView(withId(R.id.confirmationTitle))            .check(matches(isDisplayed()))    }}// ✦ Step functions compose into readable test flows@Test fun completeCheckout() {    checkoutScreen        .enterPromoCode("SAVE20")        .tapPlaceOrder()        .assertOrderConfirmed()}

Code quality

Tests written to
industry standards

Assertum doesn't just record clicks and replay them. It generates structured, maintainable test code following the same patterns senior QA engineers use: Page Objects, Step functions, and proper assertion layers.

1

Screen Objects — not raw selectors

Assertum generates a full Screen Object class per screen. UI selectors are defined once and reused everywhere — change an ID in one place, all tests adapt.

2

Step functions for human-readable flows

High-level steps wrap multi-action interactions into named functions. A QA engineer reads `tapPlaceOrder()` and knows exactly what it does — no deciphering needed.

3

Zero duplication

Step functions are composable building blocks shared across tests. Adding a new scenario means calling existing steps, not copy-pasting element lookups.

4

Lower agentic development costs

Native test code with proper abstractions is cheaper for AI agents to maintain. An agent updating a Screen Object fixes all dependent tests in one pass.

Maintenance

Tests that keep up
with your product

The biggest hidden cost in UI testing isn't writing tests — it's maintaining them as the product evolves. Assertum automates that too.

Self-Healing Tests

When your product UI changes — buttons move, IDs rename, flows restructure — Assertum detects the breakage and repairs selectors automatically. Your CI stays green without a manual fix cycle.

Lower Agentic Costs

Native tests with Screen Objects give AI agents a clean, structured surface to work with. An agent maintaining Assertum-generated tests spends far fewer tokens and iterations than working with raw, flat scripts.

AI-Assisted Maintenance

New feature? Assertum's MCP integration lets your AI agent record the new flow, extend the relevant Screen Object, and add step functions — a full test update in minutes, not days.

Human Override Always Available

Every self-healed change is shown as a diff. You approve, reject, or tune. Automation handles the toil; engineers stay in control.

Without Assertum

~40h / sprint

writing + fixing broken tests

With Assertum

< 2h / sprint

review + approve auto-generated tests

Native test structure + self-healing + AI agent integration = drastically lower cost per feature tested.

MCP Integration

Your AI agent can
see and control
your app

Most AI test generation tools work from screenshots — they're blind to the actual UI structure. Assertum exposes a full semantic element tree via the Model Context Protocol, giving AI agents direct access to element IDs, accessibility roles, text content, and interaction state.

The result: tests that understand what the UI does, not just what it looks like. No more broken selectors after a redesign.

Read UI element tree

Full semantic hierarchy with roles, labels, and states

Interact with UI

Tap, type, scroll — agent controls the app directly

Generate test assertions

AI verifies app state and writes assertions automatically

Multi-step flows

Chain complex interactions across multiple screens

MCP server running
agent>assertum.getUITree(screen="CheckoutScreen")
└ LinearLayout id="root"
├ TextView id="title" text="Your Cart"
├ RecyclerView id="cart_items"
└ Button id="checkout_btn" enabled=true
agent>assertum.tap(id="checkout_btn")
✓ Tapped. Screen navigated to "PaymentScreen"
agent>assertum.generateTest()
✓ Generated: checkoutFlowTest.kt
4 steps · 7 assertions · 0 flaky selectors

Claude / Cursor / Copilot

compatible

How it works

From zero to passing tests
in minutes

01

Install Assertum Studio

Download the desktop app and connect it to your Android device or emulator. No code changes required in your app.

terminal
brew install assertum-studio
02

Record your UI flow

Press Record, interact with your app naturally. Assertum captures every tap, swipe, and input with full semantic context.

terminal
// Assertum captures:
// → element IDs, text, roles
// → interaction sequence
// → assertions automatically
03

Generate & run tests

One click generates production-ready test code. Edit if needed, commit to your repo, and run in CI.

terminal
@Test fun checkoutFlow() {
  onView(withId(R.id.cart))
    .perform(click())
  onView(withText("Checkout"))
    .check(matches(isDisplayed()))
}

< 3s

Average test generation time

0

Brittle XPath selectors

100%

Native test code ownership

4

Platforms supported

Platforms

One tool, every platform

🤖

Android

Espresso & UIAutomator

Compose Multiplatform

Semantic tree testing

iOS

XCTest & XCUITest

🌐

Web

Playwright & Cypress

Stop writing tests by hand.
Start with Assertum.

Join early adopters generating native UI tests in seconds. Free to start, no credit card required.