- 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)