patrol 3.2.0 patrol: ^3.2.0 copied to clipboard
Powerful Flutter-native UI testing framework overcoming limitations of existing Flutter testing tools. Ready for action!
3.2.0 #
- Add support for running patrol tests on macOS (alpha) (#1847)
3.1.0 #
- Implement
patrolSetUp()
andpatrolTearDown()
, which are equivalents of vanillasetUp()
andtearDown()
but work with Patrol's native automation and test bundling feature (#1967) (#1721)
3.0.3 #
- Implement
$.native.swipe()
on iOS (#1927)
3.0.2+1 #
- Add screenshots to
pubspec.yaml
(#1917)
3.0.2 #
- Bump dependencies for Flutter 3.16 and Dart 3.2
- Populate
topics
in pubspec
3.0.1 #
- Fix extension code not being bundled by GitHub Actions workflow (#1902)
3.0.0 #
Give a warm welcome to the new Patrol DevTools Extension!
Patrol DevTools extension allows you to explore the native view hierarchy when
developing tests with patrol develop
. Now you can easily see what Android /
iOS views are currently visible and discover their properties so that they can
be used in native selectors like $.native.tap()
. You don’t have to use any
external tools for that. This is just the beginning, and we plan to add more
features to our extension in the future.
Other changes:
-
Bump minimum supported Flutter version to 3.16
-
BREAKING:
- Remove
bindingType
parameter frompatrolTest()
function. Now onlyPatrolBinding
is used and it's automatically initialized (#1882) - Remove
nativeAutomation
parameter frompatrolTest()
function. Now it's enabled by default (#1882) - This release also depends on patrol_finders v2 and includes its breaking changes.
- Remove
-
Remove dependency on
integration_test
plugin (#1882)
This version requires version 2.3.0 of patrol_cli
package.
2.3.2 #
- Add
PatrolFinder.longPress()
(#1825)
2.3.1 #
- Add support for iOS 11 and 12 (#1733)
- Fix build-time and run-time crashes when app doesn't use Kotlin 1.8.x (#1782)
2.3.0 #
- Add support for nested test hierarchies using
group()
s (#1634) - Replace Protocol Buffers and gRPC with a custom code generation solution that is more lightweight (#1681)
- Fix test name label blocking hit testing (#1731)
This version requires version 2.2.0 of patrol_cli
package.
2.2.5 #
- Fix
grantPermissionOnlyThisTime()
crashing on Android <11 (#1698)
2.2.4 #
- Remove deprecation of
nativeAutomation
and add message about migration topatrol_finders
(#1670)
2.2.3 #
- Make
KeyboardBehavior.alternative
not automatically try to hide the keyboard on iOS (#1638)
2.2.2 #
- Fix deprecation message for
andSettle
(settleBehavior -> settlePolicy) (#1622)
2.2.1 #
- Fix
appId
parameter missing fromNativeAutomator.waitUntilVisible()
(#1611) - Fix tests crashing by stopping depending on
dart:io
when running withflutter_driver
on the Web (#1578)
2.2.0 #
- Use proper context in
PatrolJUnitRunner
(#1591) - Make
Selector.instance
work on iOS (#1569) - Ignore calls to
select[Fine|Coarse]Location()
on iOS < 14 (#1564) - Add support for
getNativeViews
on iOS (#1553)
2.1.0 #
- Add
$.native.waitUntilVisible()
(#1543) - Add
KeyboardBehavior
enum to native enterText() methods (#1511)
2.0.7 #
- Add an alternative
BrowserstackPatrolJUnitRunner
, which implements a fix to make tests run on BrowserStack (#1402)
2.0.6 #
- Implement
$.native.openQuickSettings()
for iPhones without notch (#1510)
2.0.5 #
- Fix occasional cryptic failures of Gradle builds (#1509)
2.0.4 #
- Fix tests occasionally failing on iOS because of dangling
SemanticsHandle
s (#1491)
2.0.3 #
- Remove dependency on
package:http
(#1485)
2.0.2 #
- Fix
enterText()
not working when running withflutter_driver
on the web (#1459)
2.0.1 #
- Fix WebViews on modern Android versions (#1398). See #244 for more details.
- Implement a proper fix for tests failing when using native automation on Android + Flutter 3.10 (#1398). This replaces a workaround implemented in #1352
- Bump dependencies (#1446)
This version requires version 2.0.1 of patrol_cli
package.
2.0.0 #
1.1.5 #
- Fix tests failing when using native automation on Android + Flutter 3.10 (#1352)
1.1.4 #
- Fix build with Android Gradle Plugin v8 (#1276)
1.1.3 #
- Fix
which()
not taking previous finder(s) into account (#1271)
1.1.2 #
- Fix crashing when using Gradle 8 (#1262)
1.1.1 #
- Add support for Flutter 3.10 (#1254)
1.1.0 #
This version marks the official release of Hot Restart. Learn more here.
1.0.9 #
This version requires version 1.1.4 of the patrol_cli
package
- Rewrite native test reporting (#1178)
1.0.8 #
- Fix App Store warnings about non-public selectors from
patrol.framework
(#1096)
1.0.7 #
- Fix
tap()
sometimes not being able to tap on a widget that was previously found and scrolled to byscrollTo()
(#1072)
1.0.6 #
- Add preliminary support for
patrol develop
. Requires version 1.0.6 ofpatrol_cli
.
1.0.5+1 #
- Update small typo in pub.dev listing (#1034)
1.0.5 #
- Fix build of example app for Android when building on Windows (#998)
1.0.4 #
- Remove unnecessary dependency on
vm_service
(#986)
1.0.3 #
- Fix
PATROL_WAIT
(passed through--wait
argument topatrol test
) preventing frames from being pumped (#959) - Fix tapping on notification crashing on iPads (#963)
- Remove no longer functional methods from
PatrolBinding
(#970)
1.0.2 #
-
Make
NativeAutomator.enterTextByIndex()
have a default timeout, just likeNativeAutomator.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)
1.0.1 #
- Fix IndexOutOfBounds exception when waiting for native views on Android (#939)
- Fix
flutter run
not working in example app because of an error in Gradle build file (#940)
1.0.0 #
0.10.12 #
- Minor documentation fixes (#912)
0.10.11 #
- Remove unnecessary dependency on
json_serializable
andjson_annotation
(#904)
0.10.10 #
- Fix crash
Instrumentation run failed due to Process crashed
on Android (#902)
0.10.9 #
- Improve error message when trying to use
NativeAutomator
, but it's not initialized (#856)
0.10.8 #
- Add GitHub Actions showing to run Patrol tests natively on both Android and iOS (#747, #752)
- Add
PatrolTestRunner
class, which should be used instead ofFlutterTestRunner
inMainActivityTest.java
file (#754)
0.10.7 #
- Strip out code that App Store is angry about by default in release iOS builds (#727)
0.10.6 #
- Make it possible to change
LiveTestWidgetsFlutterBindingFramePolicy
inpatrolTest()
(#716)
0.10.5 #
- Add support for test label overlay in PatrolBinding (#701)
0.10.4 #
- Migrate to lite Protocol Buffers and gRPC to avoid conflicts with Firebase on Android (#688)
0.10.3 #
- Fix Android dependencies leaking into dependent apps (#683)
0.10.2 #
- Fix breaking iOS builds by migrating off
CGVectorMake()
, which is unavailable in Swift (#676)
0.10.1 #
- Fix breaking iOS builds by setting minimum iOS version to 13.0 (#674)
0.10.0 #
- Allow for running as native Android/iOS instrumented test (Patrol Next) (#646, #671)
0.9.1 #
- Add
NativeAutomator.swipe()
to enable simple swiping (#669)
0.9.0 #
- Breaking: Remove
PatrolTester.log()
- it did not fit in there and was rarely used (#665) - Breaking: Remove
PatrolTesterConfig.appName
- it's only usage was inPatrolTester.log()
, and since it was removed, this field is removed as well (#665)
0.8.0 #
- Breaking: Change signature of
PatrolTester.pumpAndSettle()
method to use named arguments (#657) - Fix
PatrolTester.dragUntilVisible()
not callingfirst
on itsFinder view
parameter (#656)
0.7.6 #
- Make it possible to configure loggers of
NativeAutomator
andHostAutomator
(#644) - Throw
PatrolFinderException
whenPatrolFinder.text
fails (#644)
0.7.5 #
- Revamp configuration of testers, letting for more granural setup (#640):
- Rename
PatrolTestConfig
toPatrolTesterConfig
- Introduce
NativeAutomatorConfig
- Introduce
HostAutomatorConfig
- Rename
- Introduce
HostAutomator.run()
method, which lets you run programs on your computer from within your Flutter integration tests (#630)
0.7.4 #
- Fix minor bug with custom binding initialization (#636)
0.7.3 #
- Add
patrolIntegrationDriver
, which extends the defaultintegrationDriver
with cool features like taking screenshots. More features enabled bypatrolIntegrationDriver
are coming soon! (#593) - Warn when package name and bundle identifier is not set in
PatrolTestConfig
(#591)
0.7.2 #
- Add
PatrolFinder.which()
(#571)
0.7.1 #
- Add
andSettle
param toPatrolFinder.scrollTo()
(#501) - Add more integration tests to the example app (#491)
0.7.0 #
In this release, we've focused on stability, reliability, and reducing flakiness.
- Add timeouts when interacting with native UI (#437)
- Implement
isPermissionDialogVisible()
method (#448)
0.6.12 #
- Add useBinding flag to
patrolTest
(#419)
0.6.11 #
- Breaking: Rename
NativeAutomator.forTest()
constructor to an unnamed constructor (#410) - Add
useBinding
flag toNativeAutomator
constructor. Defaults to true, which means thatPatrolBinding
is initialized during the constructor call (#410) - Fix
timeout
argument toNativeAutomator
being ignored (#410)
0.6.10 #
- Make
$()
accept aWidget
as an argument (#402)
0.6.9 #
- Remove the unused
appId
argument from most methods (#399) - Breaking: Rename
getNativeWidgets()
togetNativeViews()
(#399)
0.6.8 #
- Fix handling permission prompts now working in some edge cases (#383)
0.6.7+1 #
- Fix package score on pub.dev (#375)
0.6.7 #
- Implement enabling and disabling cellular on iOS (#371)
0.6.6 #
- Make
openApp()
open the app under test when noappId
is passed (#338) - Implement
enableWifi()
,disableWifi()
, andopenRecentApps()
on iOS (#338) - Completely rewrite communication with native automation servers (#338)
0.6.5 #
- Implement enabling and disabling dark mode on iOS (#345)
0.6.4+1 #
- Fix spelling of "cellular" (was "celluar") (#336)
- Fix a typo in docs (#337)
- Fix README and docs mentioning the removed
Patrol
class (#349)
0.6.4 #
- A bunch of post-release fixes (#330)
0.6.3 #
- Stop re-exporting
package:flutter_test
(#308)
0.6.2 #
- Don't require
host
andport
to be defined inpatrol.toml
or passed in as command-line arguments (#301) - Rename
Patrol
toNativeAutomator
and embed it inPatrolTester
(#297) - Print cleaner, more readable logs when native action fails (#295)
0.6.1 #
- Fix handling native permission request dialogs on older Android versions (#260)
- Populate
homepage
field inpubspec.yaml
(#254)
0.6.0 #
- Rename to patrol (#258)
- Remove
sleep
fromMaestroTestConfig
. Use the new--wait
argument available in the CLI (#251)
0.5.5 #
- Bring more functionality to iOS (#246)
- Implement native
tap()
,enterText()
, andhandlePermission()
methods on iOS Maestro.forTest()
: add optionalpackageName
andbundleId
arguments
- Implement native
0.5.4 #
- Add support for handling native permission request dialogs on Android (#232)
- Attempt to fix a weird issue with scroll not working in some rare cases (#237)
- Re-export
package:flutter_test
0.5.3 #
- Make
MaestroFinder.text
getter more robust
0.5.2 #
- Fix a problem with
StateError
being thrown when MaestroTester.dragUntilVisible found more than 1 finder after dragging to it (#228)
0.5.1 #
- Some fixes to the scrolling and dragging
0.5.0+1 #
- Set minimum Dart version to 2.17 (#224)
0.5.0 #
-
Revamp scrolling and dragging (#217)
- New
MaestroTester.dragUntilExists()
- Fixed
MaestroTester.dragUntilVisible()
's behavior - New
MaestroTester.scrollUntilExists
method - New
MaestroTester.scrollUntilVisible
method MaestroFinder.dragTo
was renamed toMaestroFinder.scrollTo
and now also scrolls to widgets that are not yet built (e.g in a lazily-builtListView
)
- New
-
Allow for more fine-grained control over timeouts (#191)
settleTimeout
, which is used forMaestroTester.pumpAndSettle
(which forwards it toWidgetTester.pumpAndSettle
)existsTimeout
, which is used forMaestroFinder.waitUntilExists
visibleTimeout
(previouslyfindTimeout
), which is used byMaestroFinder.waitUntilVisible
(which is then used internally byMaestroFinder.tap()
andMaestroFinder.enterText()
.
0.4.6 #
- Downgrade
package:freezed
to v1 beacuse customer project is not able to update to v2
0.4.5 #
- Create
MaestroTestConfig
class which is accepted bymaestroTest
function. Use it to share common configuration across all tests - Upgrade
package:freezed
to v2. Dependent projects should also make this change
0.4.4 #
MaestroFinder
:
- Rename
visible
method towaitUntilVisible
- Add
waitUntilExists
method - Add
exists
getter - Add
visible
getter
0.4.3 #
- Add
MaestroFinder.dragTo
- Remove unused
MaestroTester.drag
andMaestroTester.dragFrom
0.4.2 #
- Convert
MaestroFinder.visible
getter to a method, which now also takes a timeout - Rename
MAESTRO_ARTIFACT_PATH
environment variable to `MAESTRO_CACHE - Fix
MaestroTester.dragUntilVisible
not waiting for the scrollable to appear - Fix
MaestroFinder.allCandidates
returning incorrect results
0.4.1 #
- Throw
MaestroFinderFoundNothingException
when [MaestroFinder.visible] doesn't find any widget during [MaestroTester.findTimeout]
0.4.0 #
MaestroFinder
:
- Now
tap()
andenterText()
wait for the widget to become visible. The timeout can be configured by settingfindTimeout
inmaestroTest()
- Remove
index
parameter fromtap()
andenterText()
. The new way to select the widget to be tapped is to useat()
before tapping. Same goes for entering text - Add
bool andSettle
parameter tomaestroTest
function. This lets you globally configure whether to callpumpAndSettle
after actions such astap()
orenterText()
- Refactor
MaestroTester.dragUntilVisible
to be simpler to use - Rename
withDescendant()
tocontaining()
Native:
- Make
Maestro.openNotifications()
andMaestro.openQuickSettings()
more robust
0.3.3 #
- Make it possible to pass Flutter's
Finder
to$
- Make
MaestroFinder.first
,MaestroFinder.last
,MaestroFinder.at()
returnMaestroFinder
, notFinder
0.3.2 #
-
Improve selector engine:
- Make it possible to pass a
Key
asmatching
toMaestroTester.call(dynamic matching)
andMaestroFinder.$(dynamic matching)
- Make it possible to pass a
-
Add
sleep
parameter formaestroTest
method -
Make
WidgetTester
's forwarded methods inMaestroTester
accept less arguments -
Add more in-code documentation
0.3.1 #
-
Improve selector engine:
- Make it possible to pass a
MaestroFinder
asmatching
toMaestroTester.call(dynamic matching)
andMaestroFinder.$(dynamic matching)
- Fix a bug which caused chaining
MaestroFinder
s (e.g$(Scaffold).$(Container).$(#someText)
) to not work.
- Make it possible to pass a
-
Add more in-code documentation and improve README
0.3.0 #
- Add selector engine
0.2.0 #
-
Introduce
Selector
class, which can be passed intoMaestro.tap(selector)
. -
Add more platform functionality:
Maestro.enableWifi()
andMaestro.disableWifi()
Maestro.enableCellular()
andMaestro.disableCellular()
Maestro.enableDarkMode()
andMaestro.disableDarkMode()
Maestro.getNotifications()
,Maestro.getFirstNotification()
, andMaestro.tapOnNotification(int index)
-
Make
Maestro.forTest()
automatically callIntegrationTestWidgetsFlutterBinding.ensureInitialized()
-
Fix many smaller issues
0.1.4 #
- Allow for running on many devices simultaneously
- Rename class
Automator
toMaestro
- Simpified test-side initialization. Now all you need is
Maestro.forTest()
- Simpified driver-side initialization. Now all you need is
Maestro.forDriver()
0.1.3 #
- Add support for enabling/disabling Bluetooth
0.1.2 #
- Be more noisy when an error occurs
0.1.1 #
- Fix minor logging bug
0.1.0 #
- Add basic means of controlling platform-native Widgets (
TextView
,EditText
, andButton
on Android). This also applies to WebView. - Add enabling and disabling of Wi-Fi, Cellular, and Night Mode
- Improve stability
0.0.6 #
- Set minimum Dart version to 2.16
- Fix links to
package:leancode_lint
in README
0.0.5 #
- Update broken link in README.
0.0.4 #
- Update README
0.0.3 #
- Rename from
maestro
tomaestro_test
0.0.2 #
- Split
maestro
andmaestro_cli
into separate packages
0.0.1 #
- Initial version