Skip to content

Latest commit

 

History

History
1141 lines (837 loc) · 54.3 KB

File metadata and controls

1141 lines (837 loc) · 54.3 KB

Changelog

Unreleased

2.3.0

  • Add web support for clearState command
  • Fix assertScreenshot not failing when screenshot dimensions are mismatched
  • Make assertScreenshot work more like takeScreenshot by not requiring file extension
  • Fix path resolution for assertScreenshot to allow relative paths from flows for reference images
  • Fix inputRandomPersonName to generate a predictable "FirstName LastName" format
  • Fix iPad landscape orientation support
  • Fix specifying --device when also specifying --host
  • Fix cloud uploads to always use requested device specifications on retries

Thanks to @SosenWiosen, @leggomuhgreggo and @jkronborg who contributed changes included in this release ❤️

2.2.0

  • Add --screen-size option to test command, to specify the headless browser window size when testing web flows
  • Add MAESTRO_DEVICE_UDID, MAESTRO_SHARD_ID, and MAESTRO_SHARD_INDEX as default environment variables (useful for screenshot filenames when sharding)
  • Add step information to HTML test reports via a new html-detailed formatter
  • Add tags and custom property information to HTML and JUnit test reports
  • Add a new assertScreenshot command for visual regression testing
  • Add a cropOn property to the takeScreenshot command to crop screenshots to a specific element
  • Fix scrolling in Flutter Web
  • Fix output of subflows when using --no-ansi flag
  • Show maestro hierarchy and maestro check-syntax commands in maestro --help
  • Fix iOS driver app on Simulators running on Intel-based Macs
  • Fix a potential hang between Maestro and the on-device drivers when calls take too long
  • Some logging adjustments for less noise during web tests
  • Bump web support to Chrome v144
  • Bump DataFaker to v2.5.3, GraalJS engine to v24.2.0, log4j to v2.25.3

Thanks to @sazquatch17, @ImL1s, @sidferreira, @SosenWiosen, @TheKohan, @Fl0p, @ff-vivek and @eldare who all contributed changes included in this release ❤️

2.1.0

  • Add setPermissions command, for setting app permissions outside of launchApp
  • Add setClipboard command, for setting Maestro's internal clipboard without copying from an element
  • Add --platform and --device to maestro test command
  • Add custom JUnit properties to reporting
  • Add support for --no-reinstall-driver option to test and hierarchy commands
  • Add creation of missing folders specified in the path when taking screenshots or recording videos
  • Bump web support to Chrome v142
  • Bump npm dependencies in legacy Maestro Studio
  • Hide incomplete maestro driver-setup command from maestro --help
  • Remove deprecated deterministicOrder feature from workspace config
  • Remove deprecated maestro upload command
  • Fix bug that reported that analytics was enabled when it wasn't
  • Fix building Maestro on Java >17
  • Fix link in maestro bugreport
  • Fix cancellation of flows whilst repeat loops are running
  • Fix enumeration of multi-select elements in Web
  • Fix use of hierarchy and screenshot strategies across Android and iOS
  • Fix web tests running into Chrome's password leak detection
  • Fix webview detection and interaction on iOS 26
  • Fix broken relative paths when uploading files via multipart form in http.post

Special thanks to the Maestro community for contributing to this release! Shout out to @tokou, @kprakash2, @trongrg, @vibin, @ryuuhei0729, @Thomvis, @MarcellDr and @leovarmak ❤️

2.0.10

  • Fix error messaging when running with shards fails
  • Improve gathering of dependencies when running single flows with maestro cloud

2.0.7

Fix

  • Fixed bug affecting CI and pull request integrations where org prompts would fail in non-interactive environments.

2.0.6

Features

  • Added support for negative index in element selector
  • Made specifying --project_id for cloud upload optional. In case it is not specified and there are multiple projects, a prompt for selecting the project will be provided.
  • In case the user belongs to multiple organizations and hasn't specified --api-key during cloud upload, a prompt for selecting the organization will be provided.

Fixes

  • Added descriptions to missing element selector aspects (enabled, disabled, selected, not selected, focused, not focused)

2.0.5

Fixes

  • Removed debugging logs

2.0.4

Features

  • Added support for tapping at specific coordinates relative to an element using the relativePoint parameter in tapOn and doubleTapOn commands Github Issue
  • Labels in commands can now be dynamically evaluated using JavaScript expressions (thanks @jerriais!)

Fixes

  • Fixed issue where maestro login would fail if user was already logged in
  • Fixed iOS permission setting when using 'all' with specific permission overrides
  • Fixed issue where platform argument would be ignored
  • Fixed issue where blank platform argument would incorrectly filter out all tests
  • Fixed off-by-one error when specifying count with eraseText command on Android
  • Improved performance by evaluating script conditions eagerly, ahead of visibility conditions (thanks @tokou!)
  • Fixed crash when running Maestro with empty arguments
  • Updated iOS test runner to support Xcode 26
  • Improved logging on Android driver timeouts
  • Improved copy/paste experience in legacy Maestro Studio (thanks @tylerqr!)

2.0.3

Fixes:

  • Fix filter logic that was causing incorrect element selection when using multiple selectors together for some applications
  • GraalJS will now isolate environment variables correctly between different runScript executions
  • Fix incorrect reporting of failures in HtmlTestSuiteReporter

2.0.2

Fixes:

  • Added Rhino deprecation warning in CLI
  • Fix conditions for checking if web flows exist in workspace
  • Added back Run details to cloud upload logs (regression in Maestro 2.0.0)

2.0.1

Fixes:

  • Fix issues with launching CLI on Windows systems

2.0.0

Breaking Change:

  • Updated java version to 17 better performance, security, and modern features. If you’re still on an older version, update before using 2.0.0.
  • We’ve switched from Rhino to GraalJS as the default JavaScript engine. Expect faster execution and modern JS support for your scripts. GraalJS Behaviour Differences
  • URLs in the appId field are no longer supported. Flows must now use the url field in the YAML config for URLs.

Features:

  • Added setOrientation command — adjust device orientation in tests (PORTRAIT, UPSIDE_DOWN, LANDSCAPE_LEFT, LANDSCAPE_RIGHT). (Docs)
  • Enhanced MCP Integration:
    • More accurate flow path resolution
    • View hierarchy output size reduced by 50% (faster & lighter)
    • run_flow / run_flow_files now support env variables & hooks
  • Added --test-output-dir to specify where test artifacts should be saved. (Docs)
  • Added support for running entire workspace of web flows in a single test command.
  • Allowed Keep-Alive from Server to support for persistent connections.
  • Environment variables are now isolated between peer runFlow commands.
  • Added timestamp to JUnit and HTML test report
  • DataFaker is now available in JavaScript to generate random data for use in tests (Docs)

Fixes:

  • Fix CLI Cloud upload output
  • Fix broken maestro studio command for web version of Studio.
  • Fix memory leak for ios test runs that could cause out of memory issues on testing environments.
  • Fix maestro cloud command when uploading files that have external dependencias (subflows, scripts and media)
  • Fix disconnect in local iOS test executions when flow contains a large element tree

1.41.0

Fix:

  • Resolved an issue where view hierarchy was incorrectly returned on full-screen apps or larger devices (e.g., iPhone Pro models, iOS 18). This affected selector matching for taps and assertions.
  • Maestro now properly handles timeouts from the XCTest framework when the app UI is slow or too large. These are surfaced as actionable exceptions with helpful messages.
  • setLocation now mocks all major location providers (GPS, network, fused). Also ensures proper cleanup when the driver shuts down.
  • Errors when .maestro config file is misinterpreted as a test flow file.

Features:

  • Platform configs are now supported via workspace configuration (Docs):
    • disableAnimations for both android and iOS.
    • snapshotKeyHonorModalViews: On iOS, includes elements behind modals that are still visible on modal to user but gets missing in hierarchy.
  • Added support for selecting select tags dropdown elements in web flows.
  • Debug messages are now attached to Maestro exceptions to help users understand failures faster.
  • Added support for selecting elements using CSS/DOM query
  • Added Maestro MCP server implementation to cli by [Stevie Clifton]

Breaking Change:

  • retryTapIfNoChange is now disabled by default. It was causing side effects in some apps. If needed, it can still be manually enabled.

1.40.3

Fix

  • MissingKotlinParameterException during using maestro commands.

1.40.2

Fix

  • Sharding on iOS, throwing FileSystemAlreadyExistsException exception

1.40.1

Fix

  • iOS apps going on background while using maestro commands

Feature

  • Flag to skip interactive device selection by picking a --device-index

1.40.0

Fix:

  • JavaScript fails when running maestro test in continuous mode. Affected Commands: maestro test, maestro record (#2311)
  • Ignore notifications in analyse command for CI (#2306)
  • config.yaml not resolving on Windows (#2327)
  • Fix swipe command failure on iOS after upgrading to Xcode 16.2 issue #2422 (#2332)
  • Fix app-binary-id option on maestro cloud upload (#2361)
  • Ensure commands with missing elements fail as expected in Studio (#2140)
  • Prevent flows from getting stuck on the cloud by properly setting driver closing state (#2364)
  • Fix maestro cloud & maestro start-device on windows (#2371)
  • Improved maestro cloud to only process valid flow .yaml/.yml files and skip unrelated files like config.yaml, preventing parsing errors when uploading folders with mixed content (#2359)
  • Improved maestro cloud to skip validating non-flow files (e.g., .js, README, config.yaml) in folders, preventing parsing errors and upload failures
  • Fix setting up iOS Driver when not on bash environment (#2412)
  • Speed up view hierarchy generation by reducing SpringBoard queries and avoiding redundant app list calls on iOS. (#2419)

Features:

  • Added support for androidWebViewHierarchy: devtools option to build Android WebView hierarchy using Chrome DevTools (#2350)
  • Added Chrome to available devices for web automation (#2360)
  • Introduced pre-built mode for setting up iOS driver on simulators without relying on xcodebuild (#2325)
  • Added command-line chat mode to Maestro CLI accessible by maestro chat --ask= and maestro chat (#2378)
  • Introduced maestro check-syntax command for validating flow syntax (#2387)
  • Added --reinstall-driver flag that reinstalls xctestrunner driver before running the test. Set to false if the driver shouldn't be reinstalled (#2413)
  • Added --compact flag that remove empty values to make the output hierarchy json smaller (#2413)
  • Added --device-os and --device-model options to target specific iOS minor versions and devices (Docs) (#2413)
  • Added support for ios 18 on cloud and local
  • Bumped default iOS version to 16 for maestro start-device
  • Enabled AI command usage on mobile.dev (#2425)

Chore:

  • Update Flying Fox HTTP server on iOS driver (#2415)
  • Migrated app termination from simctl to xctest for improved stability` (#2418)

1.39.13

  • Fix : Adding upload route back again
  • Feature: Removing Analyze logs from CI uploads

1.39.12

  • Fix: Upload route on Robin was not working on maestro cloud command

1.39.11

  • Feature: Starting trial from CLI
  • Feature: Better logs to improve visibility
  • Feature: Prebuilt iOS driver without xcodebuild
  • Feature: Analyze option to test command

1.39.10

  • Update install script to tidy up old installation binaries

1.39.9

  • 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 login command for logging in Robin.
  • Feature: Improved maestro record video 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.

1.39.8

  • Fix: Debug message not showing up when we execute commands on maestro cli anymore

1.39.7

  • 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

1.39.5

Released on 2024-12-16

Fixes:

  • Fix: Failure on how the assertConditionCommand was being handled on Robin(#2171)

1.39.4

Features:

  • Add waitToSettleTimeoutMs to 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)

1.39.2

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)

1.39.1

Released on 2024-11-04

Fixes:

  • Fix: clearState now automatically reinstall the App (#2118)

1.39.0

Released on 2024-10-15

Features:

  • Feature: add --shard-split and --shard-all options to maestro test (#1955 by Tarek Belkahia)

    The --shard is now deprecated and superseded by --shard-split.

  • Feature: allow for passing multiple flow files to maestro test (#1995 by Tarek Belkahia)

  • Feature: add the optional argument to all commands (#1946 by Tarek Belkahia)

    This new command-level optional argument supersedes the (now removed) selector-level optional argument. No behavior changes are expected.

    When command with optional: true fails, 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 --platform option (#1954 by Tarek Belkahia)

  • Feature: expose current flow name as MAESTRO_FILENAME env 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 setLocation and travel commands (#1988 by Prasanta Biswas)
  • Fix: error message when specifying --format together 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)

1.38.1

Released on 2024-08-30

1.37.9

Released on 2024-08-15

  • Revert iOS landscape mode fix (#1916)

1.37.8

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)

1.37.7

Released on 2024-08-03

  • Fix cryptic "Socket Exception" when CI env var is set, once and for all (#1882)

1.37.6

Released on 2024-08-02

  • Print stack trace on 3rd retry (#1877)

1.37.5

Released on 2024-08-02

  • Fix cryptic "SocketException" when API token is invalid (#1871)

1.37.4

Released on 2024-07-30

  • Don't ask for analytics permission on CI + add MAESTRO_CLI_NO_ANALYTICS env var (#1848)

1.37.3

Released on 2024-07-29

Bug fixes

  • Fix FileNotFoundException: ~.maestro/sessions (#1843)

1.37.2 - 2024-07-29

Bug fixes

  • Fix UnsupportedOperationException: Empty collection can't be reduced (#1840)

1.37.1 - 2024-07-29

Bug fixes

  • Fix crash when flutter or xcodebuild is not installed (#1839)

1.37.0 - 2024-07-29

New features

  • Sharding tests for parallel execution on many devices 🎉 (#1732 by Kaan)

    You can now pass --shards argument to maestro test to 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:

    1. rm -rf ~/.maestro
    2. brew 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.platform to express logic that depends on whether the test runs on iOS or Android.

  • Control airplane mode (#1672 by NyCodeGHG)

    New commands: setAirplaneMode and toggleAirplaneMode. Android-only because of iOS simulator restrictions.

  • New killApp command (#1727 by Alexandre Favre)

    To trigger a System-Initiated Process Death on Android. On iOS, works the same as stopApp.

Bug fixes

1.36.0 - 2024-02-15

  • 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

1.35.0 - 2024-01-08

  • 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

1.34.5 - 2024-01-04

  • Feature: Adds a parameter to exclude all the keyboard elements from hierarchy

1.34.4 - 2023-12-27

  • Fix: Failures due to swipe ranges going beyond screen dimensions
  • Change: Adding escape key in pressKey API
  • Tweak: Avoid returning Result in IOSDriver install and clearAppState

1.34.3 - 2023-11-21

  • 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

1.34.2 - 2023-11-13

  • Tweak: Include view class in view hierarchy attributes from the Android driver

1.34.1 - 2023-11-9

  • Feature: add support --device-locale parameter for maestro cloud command
  • Feature: add support iOS17 for maestro start-device command
  • Feature: add support Android API level 34 for maestro start-device command

1.34.0 - 2023-10-24

  • Feature: support --device-locale parameter for maestro start-device
  • Feature: add centerElement parameter for scrollUntilVisible. Center element will attempt to stop scrolling when the element is near the center of the screen.
  • Feature: add power button support for pressKey on Android
  • Change: add tapOn parameter waitToSettleTimeoutMs to 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 TimeoutException for driver startup

1.33.1 - 2023-10-03

  • 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

1.33.0 - 2023-09-21

  • 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 Other due 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

1.32.0 - 2023-09-06

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

1.31.0 - 2023-08-10

  • 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.

1.30.4 - 2023-07-19

  • Fix: correctly resolve external parameters for onStart/Complete hooks
  • Fix: reuse JSEngine for all executeCommands (hooks, main commands, subflows) actions

1.30.3 - 2023-07-17

  • Update: Maestro Studio revamp improvements
    • wrapped element names in sidebar
    • sidebar text always visible
    • add "hintText" and "accessibilityText" in sidebar
    • improve sidebar search
    • fixed highlight issues in search
    • various other small improvements

1.30.2 - 2023-07-14

  • Revert connection improvements (from 1.30.1)

1.30.1 - 2023-07-14

  • Fix: Allow running maestro studio and maestro test simultaneously
  • Fix: Connection improvements

1.30.0 - 2023-07-13

  • 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

1.29.0 - 2023-06-19

  • 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!

1.28.0 - 2023-05-18

  • 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

1.27.0 - 2023-05-02

  • 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

1.26.1 - 2023-04-13

  • Fix: hideKeyboard crashing on react native apps because swipe fails on some screens

1.26.0 - 2023-04-13

  • 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.

1.25.0 - 2023-03-13

  • 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

1.24.0 - 2023-03-07

  • 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

1.23.0 - 2023-02-15

  • 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

1.22.1 - 2023-02-09

  • 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

1.21.3 - 2023-01-30

  • 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

1.21.2 - 2023-01-26

  • 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

1.21.1 - 2023-01-25

  • Fix: Increase typing speed for iOS text input

1.21.0 - 2023-01-25

  • 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

1.20.0 - 2023-01-24

  • 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

1.19.5 - 2023-01-19

  • 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

1.19.2 - 2023-01-17

  • Hotfix: Maestro Studio was not working

1.19.1 - 2023-01-17

  • 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 in maestro test and maestro upload
  • Tweak: removed Maestro Studio warning related to parallel execution
  • Refactor: making XCTestDriver configurable

1.19.0 - 2023-01-13

  • Feature: iOS unicode input support + non-English keyboards
  • Feature: swipe command now supports from argument to swipe from a given view
  • Feature: repeat command now supports while condition
  • Feature: Allowing extendedWaitUntil command to use env values in timeout 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

1.18.5 - 2023-01-10

  • 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

1.18.3 - 2022-12-27

  • 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

1.18.2 - 2022-12-27

  • Fix: Wait for XCUITest server to start before proceeding

1.18.1 - 2022-12-27

  • Fix: Create XCUITest driver HTTP server on loopback address
  • Fix: Create parity with idb for text attribute with following priority:
    • Title
    • Label
    • Value

1.18.0 - 2022-12-26

  • 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

1.17.4 - 2022-12-15

  • Fix: Maestro commands were failing if Android SDK wasn't installed

1.17.3 - 2022-12-15

  • 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

1.17.2 - 2022-12-13

  • Tweak: Deprecate hierarchy and query CLI commands

1.17.1 - 2022-12-12

  • Tweak: Remove Maestro Studio icon from Mac dock
  • Tweak: Prefer port 9999 for Maestro Studio app
  • Fix: Fix Maestro Studio conditional code snippet

1.17.0 - 2022-12-12

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

1.16.4 - 2022-12-02

  • Fix: Add error message for when an Android screen recording fails

1.16.3 - 2022-12-02

  • Fix: Fix iOS clearState not working in certain cases
  • Fix: Fix maestro record not capturing full launch screen recording

1.16.2 - 2022-12-02

  • Fix: older version of Maestro Driver on Android was not always updated

1.16.1 - 2022-11-30

  • Feature: maestro record command
  • Fix: z character was not inputted correctly on Android

1.16.0 - 2022-11-29

  • Feature: Javascript injection support
    • runScript and evalScript commands to run scripts
    • assertTrue command to assert based on Javascript
    • runFlow can be launched based on Javascript condition
    • copyTextFrom now also stores result in maestro.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

1.15.0 - 2022-11-17

  • 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 new pasteText 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 preceded by launchApp or openLink
  • Tweak: Maestro no longer kills running idb_companion processes
  • Tweak: updated gRPC version to 1.52.0

1.14.0 - 2022-11-14

  • 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

1.13.2 - 2022-11-10

  • Fix: Fallback properly on monkey when start-activity command fails, when launching app.

1.13.1 - 2022-11-09

  • Fix: Fix maestro hanging with message "Waiting for idb service to start.."
  • Fix: Fix clearState operation not working on iOS

1.13.0 - 2022-11-08

  • 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

1.12.0 - 2022-11-06

  • Feature: maestro cloud command added

1.11.4 - 2022-11-02

  • 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

1.11.3 - 2022-10-29

  • Fix: updating to dadb 1.2.4

1.11.2 - 2022-10-29

  • Fix: updating to dadb 1.2.3 to fix an occasional device connection issue
  • Fix: injecting env parameters into conditions (i.e. in runFlow)

1.11.1 - 2022-10-27

  • Fix: closing idb_companion after maestro completes

1.11.0 - 2022-10-26

  • 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 in runFlow 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

1.10.1 - 2022-10-12

  • Fix: login command fails with java.lang.IllegalStateException: closed

1.10.0 - 2022-10-12

  • Feature: repeat command that allows to create loops
  • Feature: conditional runFlow execution that allows to create if-conditions
  • Feature: inputRandomText, inputRandomNumber, inputRandomEmail and inputRandomPersonName 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 and logout 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 alongside upload and login commands
  • Fix: properly compare fields that contain regex special symbols
  • Fix: input text on Android was sometimes missing characters

1.9.0 - 2022-09-30

  • Feature: USB support for Android devices

1.8.3 - 2022-09-28

  • Fix: occasional crash when an iOS layout has a view group with a 0 width
  • Fix: properly mapping top-level syntax errors

1.8.2 - 2022-09-27

  • 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

1.8.1 - 2022-09-27

  • Fix: Timeout exception while opening port for tcp forwarding

1.8.0 - 2022-09-22

  • Feature: runFlow command
  • Tweak: support of Tab Bar on iOS
  • Tweak: added --mapping option to upload 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

1.7.2 - 2022-09-20

  • Fix: tapOn command was failing due to a failure during screenshot capture

1.7.1 - 2022-09-19

  • 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

1.7.0 - 2022-09-16

  • 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

1.6.0 - 2022-09-13

  • 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

1.5.0 - 2022-09-08

  • Temporary fix: showing an error when unicode characters are passed to inputText
  • Feature: eraseText command

1.4.2 - 2022-09-06

  • Fix: Android devices were not discoverable in some cases

1.4.1 - 2022-09-05

  • 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

1.4.0 - 2022-08-29

  • 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

1.3.6 - 2022-08-25

  • Added longPressOn command
  • Decreased wait time in apps that have a screen overlay
  • Fixed CLI issue where status updates would not propagate correctly

1.3.3 - 2022-08-23

  • Fix: iOS accessibility was not propagated to Maestro

1.3.2 - 2022-08-22

  • Fix: env parameters did not work with init flows when using Maestro programmatically

1.3.1 - 2022-08-19

  • Added support for externally supplied parameters
  • Added openLink command

1.2.6 - 2022-08-18

  • Fail launching an iOS app if the app is already running

1.2.4 - 2022-08-17

  • Add support for cli to specify what platform, host and port to connect to

1.2.3 - 2022-08-15

  • Added support of iOS state restoration
  • Exposing appId field as part of MaestroConfig

1.2.2 - 2022-08-08

  • Update Orchestra to support state restoration

1.2.1 - 2022-08-04

  • Update YamlCommandReader to accept Paths instead of Files to support zip Filesystems

1.2.0 - 2022-08-04

  • Config is now defined via a document separator
  • launchApp no longer requires and appId
  • initFlow config implemented

1.1.0 - 2022-07-28

  • launchApp command now can optionally clear app state
  • config command to allow Orchestra consumers a higher degree of customization
  • Fixed a bug where ElementNotFound hierarchy field was not declared as public

1.0.0 - 2022-07-20

  • Initial Maestro release (formerly known as Conductor)