Release Notes
What’s new in each Astur release.
0.5.0-beta.3
Section titled “0.5.0-beta.3”See what your app talks to. New device.network reports the HTTP traffic an app makes while a test drives it, so you can assert on the call rather than just the pixels — and debug a failure without reproducing it by hand.
const capabilities = await device.network.capabilities();test.skip(!capabilities.observe, capabilities.coverage);
await device.network.clear();await app.login.signIn('qa@astur.dev', 'Astur12345');
const [request] = await device.network.requests({ url: '/api/session' });expect(request).toMatchObject({ method: 'POST', status: 201 });- Available on Flutter Android today, via the Dart VM HTTP profiler. Covers
dart:ioHttpClienttraffic —package:httpand Dio included. - Ask
capabilities()rather than assuming: it reports coverage per session, so one spec runs everywhere and skips with a reason where observation is unavailable. - Credential headers redacted and bodies capped by default; the buffer clears between tests.
- Interception (stub/delay/fail) is not in this release — it needs an in-app adapter.
capabilities().interceptsays so rather than failing mysteriously.
See Network Observation for the full picture.
Fixes that were costing whole runs.
- The UiAutomator agent had silently taken over keyboard, gestures, and element actions on Flutter sessions. Its
keyboard.dismisspresses Back — which backgrounds the Flutter app and kills the Dart VM — and itsgesture.tapnever reaches the Flutter view at all. - An agent element-action failure now falls back to a coordinate tap instead of aborting the test. Fixes the native media picker on React Native Android.
- Scroll reveals were flings, not drags: the same gesture at 300 ms flung to the end of the content, at 1200 ms it moves predictably. Search loops no longer bounce between the extremes.
- A Flutter VM read could block for ~7 minutes; retries are now bounded by wall clock, with the deadline threaded into each request.
0.5.0-beta.2
Section titled “0.5.0-beta.2”by.native({ ios, android })— a raw escape hatch for the elements no other locator can pin down.iostakes an XCUITest predicate string;androidtakes a structured selector (class, text, resource id, parent/child relationships). Useful for screens with little or no accessibility metadata. See the Android and iOS guides.
astur testcould crash withspawn EINVALon Node 22/24 (worked fine on Node 20). It now runs Playwright directly instead of going throughnpx, removing the double process-indirection that triggered it.- Android inspector no longer flaps “UI tree unavailable”. If an earlier run crashed or was killed, its on-device agent kept holding Android’s automation slot and silently broke the next session’s UI tree. Astur now clears stale agent instrumentation and leaked port-forwards when a session starts, and tears its own down fully on close — a bad exit can’t poison the next run.
- Small Inspector contrast fix on the code-language toggle.
0.5.0-beta.1
Section titled “0.5.0-beta.1”- Record the new assertions from the Inspector. The assertion composer now offers enabled/disabled/selected/focused and “match count equals” (generates
toHaveCount(n)), alongside the existing text/value/label/type checks.
- Windows crash on
codegen/inspect(#10). The inspector no longer dies withError: spawn start ENOENTright after printing its URL — browser auto-open now goes throughcmd /c starton Windows, and a failed auto-open can never take the inspector down on any platform (worst case: open the printed URL yourself). - Codegen safety. The Inspector refuses to record a fill/expect step for a target without a stable locator (clear message instead of silently broken generated code), and count values are validated before a step is added.
0.5.0-beta.0
Section titled “0.5.0-beta.0”- Read element state straight from locators.
textContent(),inputValue(),bounds(),count(),isEnabled(),isDisabled(),isSelected(),isFocused(), plusclear()and a Playwright-stylewaitFor({ state }). toHaveCountassertion.await expect(device.getByRole('menuitem')).toHaveCount(3)— polls and retries like every other Astur matcher.
Improved
Section titled “Improved”- Faster multi-match queries on Android.
queryAll(),count(), anddevice.findMany()now resolve natively on-device through the UIAutomator agent instead of dumping the whole UI tree. Older installed agent builds keep working through the previous path.
0.4.0-beta.0
Section titled “0.4.0-beta.0”Improved
Section titled “Improved”- Faster iOS input fills. Short and secure values stay on the reliable typed path, long non-secure replacement fills can use paste, and iOS field state is verified after fill.
- Better keyboard handling on iOS. Taps are bounded, keyboard obstruction checks are frame-based, and multi-field flows avoid unnecessary dismiss/reopen cycles.
- WebView fills stay in web context. Inspector/codegen now remaps overlapping native WebView fields back to their DOM node, so the second fill does not accidentally route through the native iOS agent.
- Drag-and-drop in codegen. Inspector has a Drag mode and records drag actions into generated test code.
- Cleaner iOS WebView proxy lifecycle. Stale
ios-webkit-debug-proxyprocesses are cleared before a new session binds to the same port.
Release
Section titled “Release”- Bumped public packages to
0.4.0-beta.0. - Regenerated
package-lock.jsonafter dependency and package version updates.
0.3.0-beta.0
Section titled “0.3.0-beta.0”- iOS Simulator WebView DOM.
device.webContext()now drives WebView (WKWebView) DOM on the iOS Simulator as well as real devices — the same engine-agnostic API used on Android. Needsios-webkit-debug-proxy(v1.9+) and the app settingWKWebView.isInspectable = true; Astur bridges the simulator automatically. - Flutter on iOS. The shared demo suite runs on the iOS Simulator against the Flutter build, read through the XCUITest accessibility tree.
Improved
Section titled “Improved”- Faster, more reliable iOS fills. Skips re-typing when a field already holds the value, types into secure/short fields (and pastes longer text), and keeps the keyboard up across multi-field forms — dismissing it only when it blocks the next tap.
- Smoother codegen / Inspector. Device actions now pause the background screenshot/tree/WebView polling, removing the mid-fill “retrying” flicker and a WebView context drop that could happen between two fills.
- No more stuck taps. A tap on a control covered by the soft keyboard no longer hangs.
Examples & boilerplate
Section titled “Examples & boilerplate”- Reorganized examples: shared tests live in
specs/, platform configs inconfig/android/andconfig/ios/.create-asturscaffolds tospecs/to match.
Notes & limits
Section titled “Notes & limits”- WebView DOM on iOS needs
brew install ios-webkit-debug-proxy. The Playwrightweb.page(webview()) fixture stays Android-only — usedevice.webContext()on iOS. - Flutter: Android needs a debug APK + the
flutterCLI +ASTUR_FLUTTER_PROJECT; iOS exposes widgets through accessibility (addSemantics(identifier:)). See Prerequisites and Platform Limits.
Beta line: APIs may still change between beta releases.

