- Fix : Adding upload route back again
- Feature: Removing Analyze logs from CI uploads
- Fix: Upload route on Robin was not working on maestro cloud command
- Feature: Starting trial from CLI
- Feature: Better logs to improve visibility
- Feature: Prebuilt iOS driver without xcodebuild
- Feature: Analyze option to test command
- Update install script to tidy up old installation binaries
- Revert: Error in showing keyboard during input and erase commands on iOS
- Fix: applesimutils affecting granting location permission
- Fix: Setting host and port from the optional arguments
- Feature: New
maestro logincommand for logging in Robin. - Feature: Improved
maestro recordvideo to scroll and follow the currently executing commands - Fix: Enable running Maestro on Windows without WSL
- Feature: Add console.log messages directly to the maestro log file.
- Fix: Debug message not showing up when we execute commands on maestro cli anymore
-
Feature: Improved web support.
- Fix: Maestro can test web pages again (it was broken)
- Fix: WebDriver was reporting invalid screen size
- Web: support cases where a new tab is opened from the page
- Web: screen recording support (via JCodec for now, but we could add ffmpeg later)
- Web: fake geolocation support
- Studio: better layout for wide aspect-ratio screens (i.e. web pages or tablets)
-
Feature: Introduces extractTextWithAI command
-
Fix: Retry should throw exception when max retries reaches
-
Fix: Studio getting unresponsive due to exceptions in streaming device
Released on 2024-12-16
Fixes:
- Fix: Failure on how the assertConditionCommand was being handled on Robin(#2171)
Features:
- Add
waitToSettleTimeoutMsto other swipe related commands (#2153) - Add retry command for flaky conditions (#2168)
- Add support for recording maestro flows locally instead of using remote servers (#2173)
Fixes:
- Fix: multiple xcodebuild process and leading to IOSDriverTimeoutException (#2097)
- Fix: NullPointerException during view hierarchy operations for android (#2172)
- Fix: Debug level logs in maestro.log file leading to large debug files (#2170)
- Fix: Environment variable not being set for test suite (#2163)
- Fix: Failures on clearKeychain operations on iOS due to missing directories (#2178)
Released on 2024-11-19
Fixes:
- Fix: Insights object causing ConcurrentModificationException (#2131)
- Fix: Timeout unit in scrollUntilVisible command (#2112)
- Feat: Add new status for robin flows: PREPARING and INSTALLING. (#2145)
Released on 2024-11-04
Fixes:
- Fix: clearState now automatically reinstall the App (#2118)
Released on 2024-10-15
Features:
-
Feature: add
--shard-splitand--shard-alloptions tomaestro test(#1955 by Tarek Belkahia)The
--shardis now deprecated and superseded by--shard-split. -
Feature: allow for passing multiple flow files to
maestro test(#1995 by Tarek Belkahia) -
Feature: add the
optionalargument to all commands (#1946 by Tarek Belkahia)This new command-level
optionalargument supersededs the (now removed) selector-leveloptionalargument. No behavior changes are expected.When command with
optional: truefails, its status is now "warned⚠️ " instead of "skipped ⚪️" -
Feature: add changelog to the update prompt when new Maestro version is available (#1950 by Tarek Belkahia)
-
Feature: add back the
--platformoption (#1954 by Tarek Belkahia) -
Feature: expose current flow name as
MAESTRO_FILENAMEenv var (#1945 by Tarek Belkahia)
Fixes:
- Fix: Warnings generated by AI-powered commands aren't formatted nicely (#2043) (#2044)
- Fix: not working when iOS simulator is in landscape orientation (caveats apply) (#1974)
- Fix: confusing error message "BlockingCoroutine is cancelling" (#2036)
- Fix: AI-powered commands crashing when Anthropic is used (#2033)
- Fix: display warnings generated by AI-powered commands in CLI output when
optional: true(#2026) - Fix: visual bug with emojis having slightly different length in
maestro test's interactive CLI output (#2016) - Fix: no tests being run when flowsOrder specified all tests in the workspace (#2003)
- Fix: using integers from JavaScript outputs causing a deserialization error (#1788 by Muhammed Furkan Boran)
- Fix: delete temporary APKs after using them (#1947 by Tarek Belkahia)
- Fix: allow env vars in
setLocationandtravelcommands (#1988 by Prasanta Biswas) - Fix: error message when specifying
--formattogether with--continuous#1948 (#1948 by Tarek Belkahia)
Chores:
- Chore: clean up logging, make log format configurable with 2 new env vars (#2041)
- Chore: make Maestro build & compile on Java 17 (#2008)
- Chore: Migrate all Gradle buildscripts to Gradle Kotlin DSL (#1994)
Released on 2024-08-30
- New experimental AI-powered commands for screenshot testing: assertWithAI and assertNoDefectsWithAI (#1906)
- Enable basic support for Maestro uploads while keeping Maestro Cloud functioning (#1970)
Released on 2024-08-15
- Revert iOS landscape mode fix (#1916)
Released on 2024-08-14
- Fix sharding on Android failing on all but one devices (quick hotfix) (#1867)
- Fix CLI crash when flow is canceled on Maestro Cloud (#1912)
- Fix iOS landscape mode (caveats apply) (#1809)
- Skip search engine selection when running on the web (#1869)
Released on 2024-08-03
- Fix cryptic "Socket Exception" when
CIenv var is set, once and for all (#1882)
Released on 2024-08-02
- Print stack trace on 3rd retry (#1877)
Released on 2024-08-02
- Fix cryptic "SocketException" when API token is invalid (#1871)
Released on 2024-07-30
- Don't ask for analytics permission on CI + add
MAESTRO_CLI_NO_ANALYTICSenv var (#1848)
Released on 2024-07-29
- Fix
FileNotFoundException: ~.maestro/sessions(#1843)
- Fix
UnsupportedOperationException: Empty collection can't be reduced(#1840)
- Fix crash when
flutterorxcodebuildis not installed (#1839)
-
Sharding tests for parallel execution on many devices 🎉 (#1732 by Kaan)
You can now pass
--shardsargument tomaestro testto split up your test suite into chunks that run in parallel. If you have feedback or suggestions about this huge new feature, please share them with us in issue #1818. -
Reports in HTML (#1750 by Depa Panjie Purnama)
To see it, run
maestro test --format HTML <your-flow.yaml> -
Homebrew is back!
If you prefer to switch your installation of Maestro to use Homebrew:
rm -rf ~/.maestrobrew tap mobile-dev-inc/tap && brew install maestro🎉
Script install method is still supported.
-
Current platform exposed in JavaScript (#1747 by Dan Caseley)
In JavaScript, you can now access
maestro.platformto express logic that depends on whether the test runs on iOS or Android. -
Control airplane mode (#1672 by NyCodeGHG)
New commands:
setAirplaneModeandtoggleAirplaneMode. Android-only because of iOS simulator restrictions. -
New
killAppcommand (#1727 by Alexandre Favre)To trigger a System-Initiated Process Death on Android. On iOS, works the same as
stopApp.
- Fix cleaning up retries in iOS driver (#1669)
- Fix some commands not respecting custom labels (#1762 by Dan Caseley)
- Fix “Protocol family unavailable” when rerunning iOS tests (#1671 by Stanisław Chmiela)
- Feature: Add support for extra keys to Android TV
- Feature: Add support for pressing tab key on Android
- Feature: Add status and time to report.xml
- Fix: Extend retry to handle 404 in upload status call
- Fix: Crashes caused by toasts on Android API < 30
- Change: Adds view class to Android hierarchy output
- Change: Improves description of maestro start-device command to include device locale as well
- Change: Adds scrollable attribute to Android view hierarchy output
- Feature: Adds childOf attribute to selector to select from children of a container
- Feature: Adds label attribute to customize the CLI output of maestro commands
- Fix: Fixing “Unsupported architecture UNKNOWN” on linux environment when calling maestro attempts to create devices
- Fix: Allow maestro to work below API level 25 for Android
- Fix: IllegalArgumentException on swipe operation for iOS if the coordinates beyond device width and height are selected
- Feature: Adds a parameter to exclude all the keyboard elements from hierarchy
- Fix: Failures due to swipe ranges going beyond screen dimensions
- Change: Adding escape key in
pressKeyAPI - Tweak: Avoid returning
Resultin IOSDriver install and clearAppState
- Tweak: Include scrollable attribute in view hierarchy from Android Driver
- Feature: Custom labels for readability of maestro commands
- Feature: Adding childOf selector
- Tweak: Message of start-device command to show locale as well
- Tweak: Include view class in view hierarchy attributes from the Android driver
- Feature: add support
--device-localeparameter formaestro cloudcommand - Feature: add support iOS17 for
maestro start-devicecommand - Feature: add support Android API level 34 for
maestro start-devicecommand
- Feature: support
--device-localeparameter formaestro start-device - Feature: add
centerElementparameter forscrollUntilVisible. Center element will attempt to stop scrolling when the element is near the center of the screen. - Feature: add
powerbutton support forpressKeyon Android - Change: add
tapOnparameterwaitToSettleTimeoutMsto control how long it waits to move on to the next command. Helpful for animation heavy apps. - Change: improve executionOrder planning
- Change: improve retry mechanism to ensure openness of XCUITest Server
- Fix: improve
TimeoutExceptionfor driver startup
- Feature: support for multipart form data file upload in Javascript, thanks @maciejkrolik
- Fix: setPermissions produces error on Xcode 15
- Fix: Maestro studio - include enter key in command editor on initial paste
- Feature: Adds MAESTRO_DRIVER_STARTUP_TIMEOUT to iOS driver to configure timeout to start iOS driver, used in CI/CD environment with performance limitations. Thanks, Jesse Farsong for contributing.
- Feature: Introducing the "addMedia" command that enables adding images and videos directly to the devices.
- Change: Improved Studio's user interface:
- Updated fonts to align with company branding.
- Introduced a distinct loading animation for better clarity when AI is processing commands.
- Fix: Crash resulting in Error: No matches found for first query match sequence:
Children matching type Otherdue to resolving root element for a snapshot operation on iOS - Fix: Android driver getting stuck when the device was disconnected
- Fix: XCTestUnreachable exceptions due to missing IPv6 config on /etc/hosts
- Fix: Handling app crash errors from XCUITest drivers gracefully
- Fix: Timeouts can be separated with
_. For example 10_000 for 10000
Studio
- Feature: Support writing Flows using AI (more info to come 🚀)
- Feature: Maestro Studio can now run in multiple tabs simultaneously
- Feature: Added element id and copy option for it
- Tweak: Hide action buttons till command is hovered
- Tweak: Hide Unnecessary Scrollbars
- Tweak: Repl view scroll improvements
- Tweak: Improve Maestro Studio performance
- Fix: Selected element size
- Fix: Performance issues with maestro studio device refresh
- Fix: Fixed dark mode for element id
CLI
- Feature: New command to start or create a Maestro recommended device (docs)
- Feature: Support id selection for testID with react-native-web (community contribution)
- Feature: Control if browser automatically opens when running Maestro Studio via --no-window (community contribution)
- Tweak: Show cancellation reason when available (Maestro Cloud)
- Tweak: Update selenium-java and remove webdrivermanager to support Chrome 116+
- Tweak: Show device type when running on Maestro Cloud
- Tweak: Added better messaging and recovery options for Maestro Cloud uploads (useful for CI)
- Tweak: Added better error messages for missing workspace and yaml validation errors
- Tweak: Added file name and line number in yaml parsing error messages
- Fix: Input text and erase text stability improvements for iOS
- Fix: Leaking response body on iOS & better error handling for iOS Driver
- Fix: Fixed Maestro Cloud wrong exit code when flow failed
- Fix: Debug commands parsing would crash maestro
- Fix: Cleaning up debug logs
- Fix: Warning shown from OkHttp for leaking response bodies on CLI
- Closing response bodies for retries done on the XCUITest driver
- Closing response bodies for permissions
- Removing different thread execution done on hideKeyboard
- Fix: Scroll for React native apps on screens with large view hierarchies on iOS
- Fix: Showing more descriptive errors on flow file not found during maestro cloud command.
- Fix: Input text characters being skipped or being appended later in the test on iOS
- Fix: Crash in debug output generation when maestro flow contains "/"’
- Fix: Resolved issue where tapping on the device in maestro studio produced inaccurate click locations due to incorrect coordinates. Now fixed for accurate device interaction
- Fix: In Maestro Studio, the issue of window resizing causing devices to overflow off the screen has been resolved.
- Feature: Add headers to HTTP response for API calls done with Maestro. Thanks, Jesse Willoughby! for this contribution.
- Feature: Now it is possible to configure the path with the –debug-output option for debugging information that maestro dumps in the user directory by default.
- Feature: Enhanced Maestro Studio with keyboard accessibility, streamlining navigation and facilitating the copy, run, and edit commands using the keyboard.
- Change: Fail the test if any of the onFlowStart or onFlowComplete hooks fail
- Change: Removed IDB on iOS. This may impact the performance of maestro commands like tapOn and assertVisible on iOS screens with large view hierarchies.
- Studio and CLI will now provide insights and warnings in case the hierarchy of these screens becomes extensive.
- Change: In Maestro Studio, we've integrated screenshots of selected elements alongside their corresponding commands.
- Change: In Maestro Studio, double-clicking will now execute the command.
- 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 studioandmaestro testsimultaneusly - Fix: Connection improvements
- Feature: onFlowStart / onFlowComplete hooks
- Feature: Maestro Studio revamp
- improved design
- search components panel
- improved drag-and-drop
- Feature: Introduce
--app-binary-idparameter 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,focusedproperties (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.yamllevel (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
xcrunfor uninstall command on iOS - Tweak: using
xcrunfor clearKeychain command on iOS - Tweak: using
.maestrodirectory 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
scrollUntilVisiblecommand - Tweak: speed up
tapOncommand on iOS - Fix: removing view hierarchy elements that are out of screen bounds
- Fix:
inputTextcommand skipping characters on iOS - Fix: Reworked
clearAppStatebehaviour 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:
scrollUntilVisiblewas 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
scrollUntilVisiblecommand
- 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 cloudoutput - 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
--formatparameter inmaestro testandmaestro upload - Tweak: removed Maestro Studio warning related to parallel execution
- Refactor: making XCTestDriver configurable
- Feature: iOS unicode input support + non-English keyboards
- Feature:
swipecommand now supportsfromargument to swipe from a given view - Feature:
repeatcommand now supportswhilecondition - Feature: Allowing
extendedWaitUntilcommand to use env values intimeoutproperty - Tweak: assert commands now respect
optionalflag - Tweak: error analytics
- Fix: scroll not working reliably on iOS
- Fix:
openLinkwas opening Google Maps on Android - Fix: sub-flows are now included regardless of their tags
- Fix: Maestro Studio was not always computing
indexfield correctly - Fix:
maestro uploadwas ignoring JS files - Fix:
openLinkcommand 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
textattribute 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
clearStatenot working in certain cases - Fix: Fix
maestro recordnot capturing full launch screen recording
- Fix: older version of Maestro Driver on Android was not always updated
- Feature:
maestro recordcommand - Fix:
zcharacter was not inputted correctly on Android
- Feature: Javascript injection support
runScriptandevalScriptcommands to run scriptsassertTruecommand to assert based on JavascriptrunFlowcan be launched based on Javascript conditioncopyTextFromnow also stores result inmaestro.copiedTextvariable- 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-levelparameter to select API version to be used - Feature:
waitForAnimationToEndcommand to wait until animations/videos are finished - Tweak: test reports can now be generated for single test runs (and not just folders)
- Tweak:
inputTexton Android was reworked to increase speed and input stability - Tweak:
eraseTextis now much faster - Tweak:
maestro cloudwill 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:
copyTextFromcommand for copying text from a view - Feature:
maestro bugreportcommand for capturing Maestro logs - Breaking change: Removed
clipboardPastecommand in favour of newpasteTextcommand - Fix: Java 8 compatibility issue for M1 users
- Fix:
_character was mapped incorrectly on iOS - Fix: first
tapOncommand was failing unless it was preceeded bylaunchApporopenLink - Tweak: Maestro no longer kills running
idb_companionprocesses - 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 cloudcommand 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
envparameters into conditions (i.e. inrunFlow)
- Fix: closing
idb_companionaftermaestrocompletes
- Feature:
maestrowill offer user to select a device if one is not running already - Feature:
envvariables can be inlined in flow file or inrunFlowcommand - Breaking change:
--platformoption 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 uploadwas not ignoring-eparameters
- Fix: login command fails with java.lang.IllegalStateException: closed
- Feature:
repeatcommand that allows to create loops - Feature: conditional
runFlowexecution that allows to create if-conditions - Feature:
inputRandomText,inputRandomNumber,inputRandomEmailandinputRandomPersonNamecommands (thanks @ttpho !) - Feature:
clipboardPastecommand (thanks @depapp !) - Feature: Added
enabledproperty to element selector - Feature: Added
download-samplescommand to allow quickstart without having to build your own app - Feature: Added
loginandlogoutcommands for interacting with mobile.dev - Breaking change:
uploadnow takes 1 less argument.uploadNameparameter was replaced with--nameoptional argument - Tweak:
uploadcommand automatically zips iOS apps - Tweak: sending
agent: clivalue alongsideuploadandlogincommands - 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:
runFlowcommand - Tweak: support of Tab Bar on iOS
- Tweak: added
--mappingoption touploadCLI 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:
tapOncommand was failing due to a failure during screenshot capture
- Feature:
clearStatecommand - Feature:
clearKeychaincommand - Feature:
stopAppcommand - Tweak: Maestro now compares screenshots to decide whether screen has been updated
- Tweak:
launchAppcommand now supports env parameters
- Feature:
maestro uploadcommand for uploading your builds to mobile.dev - Feature:
takeScreenshotcommand - Feature:
extendedWaitUntilcommand - Fix: waiting for Android gRPC server to properly start before interacting with it
- Fix: brought back multi-window support on Android
- Fix:
hideKeyboardcommand did not always work - Fix: make project buildable on Java 14
- Refactoring: make
MaestroCommandserializable 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
MaestroCommandserialization
- Temporary fix: showing an error when unicode characters are passed to
inputText - Feature:
eraseTextcommand
- 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
inputTextdid not work properly when a string had whitespaces in it - Fix: race condition in iOS
inputText
- Added
traitsselector. - 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
longPressOncommand - 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
Maestroprogrammatically
- Added support for externally supplied parameters
- Added
openLinkcommand
- 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
appIdfield as part ofMaestroConfig
- Update
Orchestrato support state restoration
- Update
YamlCommandReaderto 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
launchAppcommand now can optionally clear app stateconfigcommand to allow Orchestra consumers a higher degree of customization- Fixed a bug where
ElementNotFoundhierarchy field was not declared as public
- Initial Maestro release (formerly known as Conductor)