Replay your iOS, tvOS and Android UI tests with video and structured logs from the app and test runner on one timeline. Group similar failures, spot flaky retries and spend less time reproducing what already happened.
iOS, tvOS & Android · PRO & ENTERPRISE · Hosted in Switzerland
Illustrative test run
A failing UI test tells you where it stopped, not why. See the recording and captured activity leading up to the failure.
Scrub a video timeline synced with captured actions, queries, requests and logs. Click a log entry to jump to that moment, and share a link to it with your team.
Similar failures are grouped automatically across runs and executions. Annotate a group once with the root cause or an issue link and see it the next time it happens.
Tests that fail and then pass on retry are flagged as flaky in every execution, and each test case’s success rate shows whether it is stable, unstable or failing.
One view of every device, every run and everything that went wrong while the suite was running.
Illustrative execution
See what the test did and how the app responded, in one structured timeline instead of two raw console dumps.
Illustrative logs
The same synced timeline powers bug reports sent by your testers.
Forty failed runs rarely mean forty bugs. Appelium shows which ones share a cause and remembers what you learned about it.
XCTAssertTrue failed - “Total CHF 47.20” not found
SHOP-1432 · Voucher service times out on STAGING
Failed to tap “loginButton” Button: No matches found
Asynchronous wait failed: Exceeded timeout of 10 seconds
Known photo library delay on fresh simulators
Illustrative data
Retries keep the pipeline green, but they also hide unstable tests. Appelium keeps the full picture.
| Test case | Runs | Success rate |
|---|---|---|
| SearchTests. | 48 | 100% |
| LoginTests. | 50 | 94% |
| CheckoutTests. | 48 | 71% |
LoginTests.
Illustrative data · Stable 100% · Unstable 80% to <100% · Failing below 80%
Add the SDK to your UI test target and set it up once. Keep your existing test steps and assertions.
Appelium’s own low-footprint encoder records at a variable frame rate synchronized with app events and shows touches in the recording.
Use a principal class on iOS and tvOS, or a shared base test class with AppeliumTestWatcher on Android. Tests using that setup are recorded without rewriting their assertions.
Parallel simulator clones are grouped automatically. Across machines, devices or Test Orchestrator, pass one execution UUID to combine every run.
import AppeliumTestsKit
// Set as NSPrincipalClass of the UI test bundle
class UITestsSetup: NSObject {
override init() {
super.init()
AppeliumTests.start(apiKey: "<api key>")
AppeliumFeedback.setApplicationEnvironment(
name: "STAGING", version: "3.2"
)
}
}// Make your UI test classes extend BaseTest
open class BaseTest {
@Rule
@JvmField
val appeliumTestWatcher = AppeliumTestWatcher()
init {
AppeliumTests.Builder(
apiKey = "<api key>"
).build()
AppeliumTests.setTestExecutionEnvironment(
name = "STAGING", version = "3.2"
)
AppeliumTests.testPlanName = "Complete"
}
}Step-by-step guides for iOS, tvOS and Android, including test plans and parallel runs. Learn how failures grouping works. Suite green? Distribute the build to your testers.
UI test recording works with XCUITest on iOS and tvOS, and with Android instrumentation tests on API 21 and later. It is available on the PRO and ENTERPRISE plans.
Your test steps and assertions stay unchanged. Add AppeliumTests to the UI test target and initialize it in a principal class on iOS and tvOS. On Android, make your test classes extend a base class with AppeliumTestWatcher. The SDK records tests using that setup. Standard URLSession requests are captured automatically on iOS and tvOS; Android test-runner requests use explicit request and response logging.
Integrate AppeliumFeedback into the app under test and enable the diagnostics you need. Captured app and test-runner logs appear on a shared timeline, each marked with its source. Available CPU and memory samples can be shown alongside the video. Console logging and network capture need the setup described in the platform guides.
Within an app, failures of the same type in the same source file are grouped when their messages are similar. Variable parts such as IDs, numbers, dates, URLs and tokens are masked before comparing. This helps collect related failures; it does not prove they share a root cause. Add your findings as an annotation and track each group as Open, Closed or Ignored.
Within an execution, a test case that both failed and passed, typically on a retry, is counted as flaky. Across executions, each test case’s success rate classifies it as Stable (100%), Unstable (at least 80% but below 100%) or Failing (below 80%).
Replay your UI tests, group related failures and keep flaky tests in check.
Strongly typed bidirectional communication channel between UIApplication and XCUIApplication with powerful APIs and super fast performance.
Robust and scaleable pattern for structuring UI tests. Highly reusable screen verification code with human readable test case code. All flows and interactions statically typed 🙌.
Learn about SnapshotQuery - our latest addition to AppeliumTests which radically improves the performance of your XCUITests while making them more stable and reliable at the same time.
Be the fist one to know about all the exciting engineering posts and product announcements.