Playwright-style mobile testing for Android and iOS
Playwright-style tests for real Android and iOS apps.
Astur drives your app through native agents, UIAutomator on Android and XCUITest on iOS, with no Appium server in between. Native, React Native and Flutter apps, on emulators, simulators and real devices.
npm create astur@latestOne test, from your editor to the device.
You write the spec with the Playwright Test API you already know. Astur carries it the rest of the way.
- Your specPlaywright Test: fixtures, projects, retries, the HTML report, the VS Code play button.
- The Astur runtimeAuto-waiting actions, retrying assertions, screenshots and video on failure.
- A native agentUIAutomator on Android, XCUITest on iOS. No Appium server, no WebDriver bridge.
- The deviceAn emulator, a simulator, or the phone on your desk.
import { test, expect } from '@astur-mobile/test';
test('sign in', async ({ device }) => {
await device.getByLabel('Email').fill('qa@example.com');
await device.getByRole('button', { name: 'Sign in' }).tap();
await expect(device.getByText('Welcome')).toBeVisible();
});Works with whatever your app is built in.
- AndroidEmulators and real devices, through a UIAutomator agent.
- iOSSimulators and real devices, through an XCUITest agent.
- React Native and ExpotestID and accessibility labels, read natively.
- FlutterThe live widget tree on Android; the accessibility tree on iOS.
- Compose and SwiftUIAnything that renders native views, including .NET MAUI.
- WebViews and mobile webReal DOM control inside the app, and Chrome or Safari on the device.
Everything a mobile suite needs, in one package.
- Inspector and codegen
- Mirror the device, browse the live tree, and record taps into a spec you keep.
- Composable locators
- getByRole, filter, and/or, nth: pin the one row you mean in a list of look-alikes.
- Assertions you can trust
- They wait for the condition and fail when the device cannot be read. A lost action is never repeated.
- Network observation
- Assert on the HTTP calls your app makes, not only on what it renders.
- Visual comparison
- toHaveScreenshot with per-device baselines and masked regions.
- Secure by default
- Every agent and the inspector require a per-session token.
See it run.
Inspection, authoring and a cross-platform run, in one short walkthrough.
Named after an instrument you could hold.
The astrolabe was an analog computer small enough to carry: turn the rete, sight a star along the alidade, and read the answer off the limb. In tenth-century Aleppo, Mariam al-Asturlabiya was known for building them.
Astur is the same idea for mobile testing: a small native runtime you can hold in one test, in place of a server stack.
Your first test is one command away.
The scaffolder asks what you target and writes a working config and a first test.
npm create astur@latest
