NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #479 most downloaded on pub.dev
A powerful, multiplatform E2E UI testing framework for Flutter apps that overcomes the limitations of integration_test by handling native interactions.
Last release 16 days ago
20 Sep 2026
Ships fairly regularly
a new release about every 3 weeks
Nearly every release is documented
notes for 59 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
4 years old
165 releases · first in 2022
Update small typo in pub.dev listing
Fix build of example app for Android when building on Windows
One column per quarter.
Remove unnecessary dependency on vm_service
vm_service (#986)Make it possible to run x86-only iOS apps on the Simulator (#1005)
Make it possible to define flavor per OS in patrol in pubspec.yaml
Generate CLI completion in $XDG_USER_HOME instead of $HOME (#1002)
Fix PATROL_WAIT (passed through --wait argument to patrol test) preventing frames from being pumped
PATROL_WAIT (passed through --wait argument to patrol test)
preventing frames from being pumped (#959)PatrolBinding (#970)Make NativeAutomator.enterTextByIndex() have a default timeout, just like NativeAutomator.enterText()
Make NativeAutomator.enterTextByIndex() have a default timeout, just like
NativeAutomator.enterText() (#943)
Documentation of these 2 methods has also been updated to explain the behavior in more detail.
Use automated publishing with GitHub Actions on pub.dev (#953) (#955) (#956) (#957)
Make output of patrol test much less verbose when test fails on Android. (#964)
Run with --verbose to still see all the logs that were previously visible.
Fix IndexOutOfBounds exception when waiting for native views on Android
flutter run not working in example app because of an error in Gradle
build file (#940)Add shell completion (#950)
Use automated publishing with GitHub Actions on pub.dev (#953)
- Patrol 1.0 is released!
- Minor documentation fixes
Remove unnecessary dependency on json_serializable and json_annotation
json_serializable and json_annotation
(#904)Fix crash Instrumentation run failed due to Process crashed on Android
Instrumentation run failed due to Process crashed on Android
(#902)Improve error message when trying to use NativeAutomator, but it's not initialized
NativeAutomator, but it's not
initialized (#856)Add GitHub Actions showing to run Patrol tests natively on both Android and iOS (#747, #752)
PatrolTestRunner class, which should be used instead of
FlutterTestRunner in MainActivityTest.java file (#754)Strip out code that App Store is angry about by default in release iOS builds
Make it possible to change LiveTestWidgetsFlutterBindingFramePolicy in patrolTest()
LiveTestWidgetsFlutterBindingFramePolicy in
patrolTest() (#716)Add support for test label overlay in PatrolBinding
Migrate to lite Protocol Buffers and gRPC to avoid conflicts with Firebase on Android
Fix Android dependencies leaking into dependent apps
Fix breaking iOS builds by migrating off CGVectorMake(), which is unavailable in Swift
CGVectorMake(), which is
unavailable in Swift (#676)Fix breaking iOS builds by setting minimum iOS version to 13.0
Allow for running as native Android/iOS instrumented test (Patrol Next) (#646,
Add NativeAutomator.swipe() to enable simple swiping
NativeAutomator.swipe() to enable simple swiping (#669)Improve error message of patrol test when the integration_test directory doesn't exist (#876)
Make patrol test run tests in a more predictable, ls -like order (#882)
Fix patrol test incorrectly encoding --dart-define when running on Android (#885)
Display name of currently running test file in top-left corner (#885)
Breaking: Remove PatrolTester.log() - it did not fit in there and was rarely used
PatrolTester.log() - it did not fit in there and was
rarely used (#665)PatrolTesterConfig.appName - it's only usage was in
PatrolTester.log(), and since it was removed, this field is removed as well
(#665)Enable patrol test for physical iOS devices (#863)
Make it possible to specify package_name and bundle_id in pubspec.yaml (#868)
If these values are set, the tool automatically uninstalls the app after every test. It's recommended to set them.
Example:
dependencies:
dev_dependencies:
patrol: android: package_name: pl.leancode.awesomeapp app_name: Awesome App ios: bundle_id: pl.leancode.AwesomeApp app_name: Awesome App
Breaking: Change signature of PatrolTester.pumpAndSettle() method to use named arguments
PatrolTester.pumpAndSettle() method to use
named arguments (#657)PatrolTester.dragUntilVisible() not calling first on its Finder view
parameter (#656)Make it possible to configure loggers of NativeAutomator and HostAutomator
NativeAutomator and HostAutomator
(#644)PatrolFinderException when PatrolFinder.text fails (#644)Revamp configuration of testers, letting for more granural setup (#640):
PatrolTestConfig to PatrolTesterConfigNativeAutomatorConfigHostAutomatorConfigHostAutomator.run() method, which lets you run programs on your
computer from within your Flutter integration tests (#630)Reenable terminal animations (#521)
Fix infinite wait when more than 2 Android devices are connected (#553)
Fix minor bug with custom binding initialization
Print more useful info in patrol doctor (#541)
Accept both device name and device ID for the --device argument to patrol drive (#537)
Wait for the package service to become active on Android before installing apk (#539, #540)
Add patrolIntegrationDriver, which extends the default integrationDriver with cool features like taking screenshots. More features enabled by patrolIn
patrolIntegrationDriver, which extends the default integrationDriver
with cool features like taking screenshots. More features enabled by
patrolIntegrationDriver are coming soon! (#593)PatrolTestConfig
(#591)AutomatorServer:
Improve reliability of native interactions on iOS (#489)
Set minimum iOS version to 14.0 (#496)
- Add PatrolFinder.which()
PatrolFinder.which() (#571)Make --target flag accept directories (#473)
Use prebuilt artifacts when running on iOS Simulator (#465)
Automatically download new artifacts during patrol update (#465)
Add andSettle param to PatrolFinder.scrollTo()
andSettle param to PatrolFinder.scrollTo() (#501)In this release, we've focused on stability, reliability, and reducing flakiness.
In this release, we've focused on stability, reliability, and reducing flakiness.
isPermissionDialogVisible() method (#448)In this release, we've focused on stability, reliability, and reducing flakiness.
AutomatorServer:
Add timeouts when interacting with native UI (#437)
Implement isPermissionDialogVisible() method (#448)
Fix entering text into SecureTextField on iOS (#446)
Add useBinding flag to patrolTest
patrolTest (#419)Breaking: Rename NativeAutomator.forTest() constructor to an unnamed constructor
NativeAutomator.forTest() constructor to an unnamed
constructor (#410)useBinding flag to NativeAutomator constructor. Defaults to true,
which means that PatrolBinding is initialized during the constructor call
(#410)timeout argument to NativeAutomator being ignored (#410)Improve stability (#397)
AutomatorServer:
Rename getNativeWidgets() to getNativeViews() (#399)
Add tapOnNotificationByIndex() , tapOnNotificationBySelector() , and closeHeadsUpNotification() on iOS (#398)
Make $() accept a Widget as an argument
$() accept a Widget as an argument (#402)Fix artifacts being downloaded on every run on Linux and Windows (#392)
Fix a small typo during patrol drive (#391)
AutomatorServer:
Fix getNativeWidgets() crashing on Android (#393)
Remove the unused appId argument from most methods
appId argument from most methods (#399)getNativeWidgets() to getNativeViews() (#399)Fix handling permission prompts now working in some edge cases
Improve update prompt (#377)
AutomatorServer:
Remove remaining Objective-C code (#374)
- Fix package score on pub.dev
Implement enabling and disabling cellular on iOS
AutomatorServer:
Implement enabling and disabling cellular on iOS (#371)
Fix crash with trying to use non-existent AutomatorServer.xcworkspace when running tests on iOS (#371)
Make openApp() open the app under test when no appId is passed
openApp() open the app under test when no appId is passed (#338)enableWifi(), disableWifi(), and openRecentApps() on iOS
(#338)Implement enabling and disabling dark mode on iOS
Fix spelling of "cellular" (was "celluar")
Patrol class (#349)- A bunch of post-release fixes
Add the targets alias for target option for patrol drive (#314)
Add the devices alias for device option for patrol drive (#314)
Add the dart-defines alias for dart-define option for patrol drive (#314)
Remove support for the patrol.toml config file (#313)
Stop re-exporting package:flutter_test
package:flutter_test (#308)Don't require host and port to be defined in patrol.toml or passed in as command-line arguments (#301)
Print cleaner, more readable logs when native action fails (#295)
Don't require host and port to be defined in patrol.toml or passed in as command-line arguments
host and port to be defined in patrol.toml or passed in as
command-line arguments (#301)Patrol to NativeAutomator and embed it in PatrolTester (#297)Restart flutter drive on connection failure (#280)
Rename --devices to --device to be more consistent (#280)
Populate homepage field in pubspec.yaml (#254)
Fix handling native permission request dialogs on older Android versions
homepage field in pubspec.yaml (#254)Remove sleep from MaestroTestConfig. Use the new --wait argument available in the CLI
sleep from MaestroTestConfig. Use the new --wait argument
available in the CLI (#251)Your coding agent can read these notes before it upgrades. Set up the MCP server →