- Fix: correctly resolve external parameters for onStart/Complete hooks
- Fix: reuse JSEngine for all executeCommands (hooks, main commands, subflows) actions
- Update: Maestro Studio revamp improvements
- wrapped element names in sidebar
- sidebar text always visible
- add "hintText" and "accesbilityText" in sidebar
- improve sidebar search
- fixed highlight issues in search
- various other small improvements
- Revert connection improvements (from 1.30.1)
- Fix: Allow running
maestro studio
andmaestro test
simultaneusly - Fix: Connection improvements
- Feature: onFlowStart / onFlowComplete hooks
- Feature: Maestro Studio revamp
- improved design
- search components panel
- improved drag-and-drop
- Feature: Introduce
--app-binary-id
parameter for Maestro Cloud upload action to be able to re-use a previously uploaded app for different flows - Feature: Implement Experimental GraalJsEngine (ECMAScript 2022 compliant)
- Fix: Save xctest xcodebuild logs output to system temp dir
- Fix: Close existing screen recording if it was left open.
- Thanks, @carlosmuvi, for the contribution!
- Fix: Execute sequential Flows even if no other Flows are present
- Fix: Various XCTestClient connection improvements
- Deprecate:
assertOutgoingRequestsCommand
- Deprecate: Network Mocking feature
- Deprecate: Maestro Mock Server feature
- Feature: Add test duration measurement and display
- Feature: New screen recording commands
- Thanks, @tokou, for the contribution!
- Feature: Add support for sequential execution
- Feature: Add support for double taps + multiple taps in tapOn
- Feature: Add support for custom Android driver startup timeout
- Thanks, @arildojr7, for the contribution!
- Fix: Validate workspace prior to upload to Maestro Cloud
- Fix: Resolve Android scrollUntilVisible flakiness
- Fix: Resolve inputText flakiness
- Fix: iOS url arguments
- Thanks, @tokou, for the contribution!
- Feature: runScript command now support conditional execution
- Feature: Improved debug output:
- Shows failure reason when command fails
- Generates screenshot when command fails
- Unified most logs under ~/.maestro/tests//maestro.log
- Change: Launch arguments support for long values
- Tweak: JUnit report naming changes. Local and Cloud should now have the same naming convention.
- Tweak: Added deprecation notice for experimental features
- Fix: maestro record command was not working on iOS
- Fix: WebDriver, only scroll to elements outside of the window before tapping
- Fix: close request leaking body
- Fix: maestro cloud now will fail on timeout if configured as such
- Feature: Adds assertOutgoingRequests to assert the network requests from the app
- Feature: Add platform condition in runFlow command to do platform-specific orchestration. Thanks, Larry Ng for your contribution!
- Feature: Adds a new selector containsDescendants. Thanks, Larry Ng for your contribution!
- Feature: iOS and Android launch arguments
- Change: Include the update command instead of update instructions in the update message. Thanks @bobpozun for your contribution!
- Fix: Fixes swipe flakiness caused due to waiting for animations to complete on XCTest
- Fix: Correctly resolving
maestro.copiedText
- Fix: Using deviceId instead of booted, potentially resolving XCTestUnreachable exceptions.
- Fix: Improving waitForAppToSettle for Android by accounting window updates. Resolves maestro command interaction in Android 13.
- Fix: Notification permissions not getting granted
- Fix: Use correct documentation URLs in Studio
- Fix: hideKeyboard crashing on react native apps because swipe fails on some screens
- Feature: Adds Travel command to mock motion for app
- Feature: Adds a capability to match the toast messages
- Feature: Add support for console.log in javascript
- Feature: Allow writing inline flows with runFlow command
- Change: Adds sms permission to permission names which can be used to allow/deny: android.permission.READ_SMS, android.permission.RECIEVE_SMS, android.permission.SEND_SMS. Thanks, @depapp for the contribution.
- Change: Maestro can now also match hint text and values of text field.
- Change: Maestro can now also match elements with their accessibility text.
- Commands moved away from IDB:
- Long press is now done with XCTest instead of idb
- Installation of app is now done with simctl commands
- Hide keyboard with help of XCTest. We now scroll up and down from the middle of the screen to close the keyboard.
- Press key now is done with XCTest.
- Note that with this change pressKey: Enter now only wraps on new line - earlier it also closed the keyboard
- Erase text is now done with XCTest.
- Use simctl to record screen
- Fix: Web driver no longer crashes when using latest Chrome
- Fix: Fixes hideKeyboard on android by appropriately dispatching proper event. Thanks, @nhaarman for contribution
- Fix: Properly shutting down studio by listening to SIGTSP signal
- Fix: Update granting of notifications and health permissions causing simulator restarts and XCTestUnreachableExceptions.
- Fix: Shell environment variables can no longer crash the javascript runtime
- Fix: XCTestRunner and IDB are restarted on connection error
- Feature: Add support for setLocation
- Change: LaunchApp command sets all app permissions to allow (documentation)
- Feature: LaunchApp supports specifying app permission state
- Feature: On Android it is now possible to force links to be opened in the browser
- Fix: Autocorrect is no longer applied to inputText on iOS
- Fix: iOS apps with big view hierarchies (common with ReactNative and Flutter) caused an error in XCTest.framework
- Fix: Studio UI fixes for Firefox and Safari
- Fix: Element selection behavior in Maestro Studio
- Feature: Maestro Studio - Action Modal
- Feature: Maestro Studio - Dark Mode
- Feature: assertion on
enabled
,selected
,checked
,focused
properties (documentation) - Feature: running tests in a deterministic order (documentation)
- Feature: default global tags can now be set in
config.yaml
(documentation) - Feature: allow to configure what flows should be included into a run at
config.yaml
level (documentation) - Tweak: considerable speed-up of iOS tests due to removal of unnecessary hierarchy polling
- Tweak: wait for app to settle before proceeding with iOS test
- Tweak: UX improvements in "delete command" confirmation dialog
- Tweak: using
xcrun
for uninstall command on iOS - Tweak: using
xcrun
for clearKeychain command on iOS - Tweak: using
.maestro
directory by default for mockserver deploy command - Fix: errors were clipped in Maestro Studio
- Fix: use element title as id in Web driver
- Fix: Repeat-while-true did not work properly with JavaScript conditions
- Fix: Repeat-times did not work properly with JavaScript input
- Fix: added artificial delay after key presses (i.e. "back" key) on Android
- Early Access Feature: Maestro Mock Server and Maestro SDK (Android preview)
- Tweak: added visibility threshold and scroll speed to
scrollUntilVisible
command - Tweak: speed up
tapOn
command on iOS - Fix: removing view hierarchy elements that are out of screen bounds
- Fix:
inputText
command skipping characters on iOS - Fix: Reworked
clearAppState
behaviour on iOS, solving issue that caused crashes after clearing the state - Fix: crash when running multiple Maestro sessions in parallel while using iOS device
- Fix: a rare crash in React Native apps when trying to input a long string on iOS
- Fix: properly handling linebreaks in Maestro Studio
- Fix:
scrollUntilVisible
was not always working on iOS - Tweak: speed up tests by skipping an unnecessary hierarchy poll
- Tweak: iOS screenshot no longer depends on IDB and is faster
- Hotfix: Move iOS tap() implementation back to IDB to resolve problems with React Native apps
- Fix: running multiple Maestro instances would sometimes result in Connection exception
- Fix: support JS injection in
scrollUntilVisible
command
- Fix: Increase typing speed for iOS text input
- Feature: Next evolution of Maestro Studio
- Fix: More robust implementation of inputText on iOS
- Fix: More robust implementation of tap on iOS
- Experimental: Added web driver
- Feature: Maestro Studio - use percentage-based swiping
- Feature: Scroll until view element is visible
- Feature: Relatively swipe with percentage based start and end coordinates
- Fix: Android tap was not always working
- Fix: Bottom of Android hierarchy was cut off
- Fix: idb_companion fails to start due to gRPC timeout exception
- Tweak: Improve Android Screenshot Internal Logic
- Tweak: Change the end coordinates for swipe element
- Tweak: Update sample flows
- Fix: inputText was not working on iOS React Native apps
- Fix: Maestro fails to launch on iOS if --device parameter is present
- Fix: Evaluate JS scripts with element selector in swipe command
- Tweak: added tags to sample flows
- Tweak: indicating whether build is running on CI in analytics
- Hotfix: Maestro Studio was not working
- Feature: generating test report from
maestro cloud
output - Fix: in rare cases, maestro cloud was computing progress bar as negative value
- Fix: local test suite included non-flow files
- Fix: some special characters were not allowed in env variables (i.e.
&
) - Fix: vertical scrolling was sometimes not working on iOS
- Fix: if a text string is an invalid regex, treat it as a regular string instead
- Fix: scroll and swipe commands on iOS were throwing an error when running in parallel with Maestro Studio
- Tweak: print out valid inputs for
--format
parameter inmaestro test
andmaestro upload
- Tweak: removed Maestro Studio warning related to parallel execution
- Refactor: making XCTestDriver configurable
- Feature: iOS unicode input support + non-English keyboards
- Feature:
swipe
command now supportsfrom
argument to swipe from a given view - Feature:
repeat
command now supportswhile
condition - Feature: Allowing
extendedWaitUntil
command to use env values intimeout
property - Tweak: assert commands now respect
optional
flag - Tweak: error analytics
- Fix: scroll not working reliably on iOS
- Fix:
openLink
was opening Google Maps on Android - Fix: sub-flows are now included regardless of their tags
- Fix: Maestro Studio was not always computing
index
field correctly - Fix:
maestro upload
was ignoring JS files - Fix:
openLink
command now supports query parameters
- Feature: tags
- Tweak: allow running other maestro commands alongside Maestro Studio
- Tweak: improved matching for strings with linebreaks
- Fix: creating maestro logs directory was not always working properly
- Fix: maestro studio was not working properly on Kubuntu
- XCUITest driver improvements and fixes:
- Close the response when validating server up
- Add logs to uninstall of runner
- Remove redundant import and library from maestro-ios
- Kills the process before we uninstall it
- Redirect runner logs in xctest_runner_logs directory
- Fix: Wait for XCUITest server to start before proceeding
- Fix: Create XCUITest driver HTTP server on loopback address
- Fix: Create parity with idb for
text
attribute with following priority:- Title
- Label
- Value
- Feature: Adds new XcUITest driver to capture view hierarchy on iOS.
- Fixes stability issues on iOS 16
- Fixes not identified bottom navigation tabs
- Gets view hierarchy natively from XCUITest
- Fix: Missing letter j and y in inputRandomText command
- Tweak: Un-deprecate the hierarchy command, inform about Studio
- Tweak: Match negative bounds as well in maestro studio
- Feature: Adds replay functionality in maestro studio
- Feature: Adding device interaction to interact page in Maestro Studio
- Fix: Maestro commands were failing if Android SDK wasn't installed
- Feature: no-ansi version for terminals that do not ANSI
- Feature: Android Maven artifact for setting up network mocking
- Fix: Android emulator was not discovered properly if it wasn't on PATH
- Fix: missing favicon
- Tweak: Deprecate hierachy and query CLI commands
- Tweak: Remove Maestro Studio icon from Mac dock
- Tweak: Prefer port 9999 for Maestro Studio app
- Fix: Fix Maestro Studio conditional code snippet
- Feature: Maestro Studio
- Feature: Print a message when an update is available
- Feature: Support percentages for tapOn
- Fix: Maestro commands execute faster now
- Fix: Fix environment variable substitution in certain cases
- Fix: Use actual android device screen size (including nav bar)
- Fix: Add error message for when an Android screen recording fails
- Fix: Fix iOS
clearState
not working in certain cases - Fix: Fix
maestro record
not capturing full launch screen recording
- Fix: older version of Maestro Driver on Android was not always updated
- Feature:
maestro record
command - Fix:
z
character was not inputted correctly on Android
- Feature: Javascript injection support
runScript
andevalScript
commands to run scriptsassertTrue
command to assert based on JavascriptrunFlow
can be launched based on Javascript conditioncopyTextFrom
now also stores result inmaestro.copiedText
variable- Env parameters are now treated as Javascript variables
- Feature: HTTP(s) requests
http.request()
Javascript API that allows to make HTTP requests as part of Maestro flows
- Feature: Maestro Cloud
--android-api-level
parameter to select API version to be used - Feature:
waitForAnimationToEnd
command to wait until animations/videos are finished - Tweak: test reports can now be generated for single test runs (and not just folders)
- Tweak:
inputText
on Android was reworked to increase speed and input stability - Tweak:
eraseText
is now much faster - Tweak:
maestro cloud
will automatically retry upload up to 3 times - Fix: running on Samsung devices was sometimes failing because of wrong user being used
- Feature: run all tests in a folder as a suite
- Feature: XML test report in JUnit-compatible format
- Feature:
copyTextFrom
command for copying text from a view - Feature:
maestro bugreport
command for capturing Maestro logs - Breaking change: Removed
clipboardPaste
command in favour of newpasteText
command - Fix: Java 8 compatibility issue for M1 users
- Fix:
_
character was mapped incorrectly on iOS - Fix: first
tapOn
command was failing unless it was preceeded bylaunchApp
oropenLink
- Tweak: Maestro no longer kills running
idb_companion
processes - Tweak: updated gRPC version to 1.52.0
- Fix: passing env parameters to subflows and other env params
- Speeding up maestro flows
- Checking in maestro sample flows and adds sample updating guide
- Maestro is now compatible with java 8!
- Launching app without stopping the app
- Fixing launching app when resolving launcher activity throws
NullPointerException
- Fix: Fallback properly on monkey when start-activity command fails, when launching app.
- Fix: Fix maestro hanging with message "Waiting for idb service to start.."
- Fix: Fix clearState operation not working on iOS
- Feature: Option to set direction and speed for swipe command
- Fix: Fix duplicate and unavailable iOS simulators in list
- Fix: Longer timeout for iOS simulator boot
- Feature:
maestro cloud
command added
- Fix: Use absolute path to prevent NullPointerException when .app folder is in the cwd
- Fix: Create parent directory if not exists when generating adb key pair, updates dadb to 1.2.6
- Fix: Opening of leak canary app
- Tweak: send agent: ci when known CI environment variables are set
- Fix: updating to dadb 1.2.4
- Fix: updating to dadb 1.2.3 to fix an occassional device connection issue
- Fix: injecting
env
parameters into conditions (i.e. inrunFlow
)
- Fix: closing
idb_companion
aftermaestro
completes
- Feature:
maestro
will offer user to select a device if one is not running already - Feature:
env
variables can be inlined in flow file or inrunFlow
command - Breaking change:
--platform
option is deprecated. CLI now prompts user to pick a device. - Tweak: auto-starting
idb_companion
. No need to start it manually anymore. - Tweak: tripled Android Driver launch timeout
- Tweak: customisable error resolution in Orchestra
- Fix:
maestro upload
was not ignoring-e
parameters
- Fix: login command fails with java.lang.IllegalStateException: closed
- Feature:
repeat
command that allows to create loops - Feature: conditional
runFlow
execution that allows to create if-conditions - Feature:
inputRandomText
,inputRandomNumber
,inputRandomEmail
andinputRandomPersonName
commands (thanks @ttpho !) - Feature:
clipboardPaste
command (thanks @depapp !) - Feature: Added
enabled
property to element selector - Feature: Added
download-samples
command to allow quickstart without having to build your own app - Feature: Added
login
andlogout
commands for interacting with mobile.dev - Breaking change:
upload
now takes 1 less argument.uploadName
parameter was replaced with--name
optional argument - Tweak:
upload
command automatically zips iOS apps - Tweak: sending
agent: cli
value alongsideupload
andlogin
commands - Fix: properly compare fields that contain regex special symbols
- Fix: input text on Android was sometimes missing characters
- Feature: USB support for Android devices
- Fix: occasional crash when an iOS layout has a view group with a 0 width
- Fix: properly mapping top-level syntax errors
- Tweak: prioritise clickable elements over non-clickable ones
- Fix: close TCP forwarder if it is already in use
- Fix: hideKeyboard on Android did not always work
- Fix: Timeout exception while opening port for tcp forwarding
- Feature:
runFlow
command - Tweak: support of Tab Bar on iOS
- Tweak: added
--mapping
option toupload
CLI command - Fix: open the main launcher screen on Android instead of Leak Canary
- Fix: input character-by-character on Android to counter adb issue where not the whole text gets transferred to the device
- Fix:
tapOn
command was failing due to a failure during screenshot capture
- Feature:
clearState
command - Feature:
clearKeychain
command - Feature:
stopApp
command - Tweak: Maestro now compares screenshots to decide whether screen has been updated
- Tweak:
launchApp
command now supports env parameters
- Feature:
maestro upload
command for uploading your builds to mobile.dev - Feature:
takeScreenshot
command - Feature:
extendedWaitUntil
command - Fix: waiting for Android gRPC server to properly start before interacting with it
- Fix: brought back multi-window support on Android
- Fix:
hideKeyboard
command did not always work - Fix: make project buildable on Java 14
- Refactoring: make
MaestroCommand
serializable without custom adapters - Refactoring: migrated to JUnit 5
- Feature: hideKeyboard command
- Feature: add Android TV Remote navigation
- Tweak: allowing to skip package name when searching by
id
- Fix: Android WebView contents were sometimes not reported as part of the view hierarchy
- Fix: iOS inputText race condition
- Fix: populate iOS accessibility value
- Refactoring: simplified
MaestroCommand
serialization
- Temporary fix: showing an error when unicode characters are passed to
inputText
- Feature:
eraseText
command
- Fix: Android devices were not discoverable in some cases
- Fix: relative position selectors (i.e.
below
) were sometimes picking a wrong view - Fix: await channel termination when closing a gRPC ManagedChannel
- Fix: Android
inputText
did not work properly when a string had whitespaces in it - Fix: race condition in iOS
inputText
- Added
traits
selector. - Relative selectors (such as
above
,below
, etc.) are now picking the closest element. - Fix: continuous mode did not work for paths without a parent directory
- Fix: workaround for UiAutomator content descriptor crash
- Fix:
tapOn: {int}
did not work
- Added
longPressOn
command - Decreased wait time in apps that have a screen overlay
- Fixed CLI issue where status updates would not propagate correctly
- Fix: iOS accessibility was not propagated to Maestro
- Fix: env parameters did not work with init flows when using
Maestro
programmatically
- Added support for externally supplied parameters
- Added
openLink
command
- Fail launching an iOS app if the app is already running
- Add support for cli to specify what platform, host and port to connect to
- Added support of iOS state restoration
- Exposing
appId
field as part ofMaestroConfig
- Update
Orchestra
to support state restoration
- Update
YamlCommandReader
to accept Paths instead of Files to support zip Filesystems
- Config is now defined via a document separator
- launchApp no longer requires and appId
- initFlow config implemented
launchApp
command now can optionally clear app stateconfig
command to allow Orchestra consumers a higher degree of customization- Fixed a bug where
ElementNotFound
hierarchy field was not declared as public
- Initial Maestro release (formerly known as Conductor)