- null-safety migration, thanks to @tshedor
-
Upgraded to the null-safety version of dart_gherkin, as such there are some breaking changes to be aware of (see https://github.com/jonsamwell/dart_gherkin/blob/master/CHANGELOG.md for the full list):
- BREAKING CHANGE: Table has been renamed to GherkinTable to avoid naming clashes
- BREAKING CHANGE: exitAfterTestRun configuration option has been removed as it depends on importing dart:io which is not available under certain environments (dartjs for example).
- BREAKING CHANGE: Reporter->onException() exception parameter is now an object rather than an exception
- POSSIBLE BREAKING CHANGE: Feature file discovery has been refactored to abstract it from the external Glob dependency. It now support the three native dart Patterns (String, RegExp & Glob). There is potential here for your patterns to not work anymore due as the default IoFeatureFileAccessor assumes the current directory is the working directory to search from. For the most part this simple regex is probably enough to get you going.
RegExp('features/*.*.feature')
-
Allow dart-define to be passed to the Flutter build (thanks @Pholey)
- Fixes #93 & #92 - Error waiting for no transient callbacks from Flutter driver
- Added option to leave Flutter app under test running when the tests finish see
keepAppRunningAfterTests
configuration property - Added the ability to have multiple example blocks with tags per scenario outline
- Fixes #84 - pre-defined
present within N seconds
is limited by system timeout (thanks @doubleo2) - Added build mode to enable profile build and performance profiling (thanks @lsuhov)
- Updated to latest dart_gherkin library which fixes access to the default step timeout see #81
- Added well know steps and a driver helper method to long press a widget (fixed issue and documentation)
When I long press "controlKey" button
When I long press "controlKey" icon for 1500 milliseconds
- Added well know steps and a driver helper method to long press a widget
When I long press "controlKey" button
When I long press "controlKey" icon for 1500 milliseconds
- Upgraded to latest Gherkin library version which fixes issues with non-alpha-numeric characters in multiline strings and comments jonsamwell/dart_gherkin#14 jonsamwell/dart_gherkin#15 jonsamwell/dart_gherkin#16
- Ensure all well known steps are exposed (Thanks to @tshedor for the PR!)
- Fixes #76
- Updated Gherkin library version to allow for function step implementations; updated docs to match.
- Add steps
SiblingContainsText
,SwipeOnKey
,SwipeOnText
,TapTextWithinWidget
,TapWidgetOfType
,TapWidgetOfTypeWithin
,TapWidgetWithText
,TextExists
,TextExistsWithin
,WaitUntilKeyExists
, andWaitUntilTypeExists
. Thanks to @tshedor for the PR!
- Fixed issue where the connection attempt of Flutter driver would not retry before throwing a connection error. This was causing an error on some machines trying to connect to an Android emulator (x86 & x86_64) that runs the googleapis (see flutter/flutter#42433)
- Added a before
onBeforeFlutterDriverConnect
and afteronAfterFlutterDriverConnect
Flutter driver connection method property to the test configurationFlutterTestConfiguration
to enable custom logic before and after a driver connection attempt. - Updated Gherkin library version to sort issue with JSON reporter throwing error when an exception is logged before any steps have run
- Updated Gherkin library version to sort issue with JSON reporter throwing error when an exception is logged before any feature have run
- Updated library to work with the new way the Flutter stable branch manages logging for Flutter driver
- Added the ability to test against an already running app; enabling you to debug a running application while it has tests executed against it. Setting the configuration property
runningAppProtocolEndpointUri
to the service protocol endpoint (found in stdout when an app has--verbose
logging turned on) will ensure that the existing app is connected to rather than starting a new instance of the app. NOTE: ensure the app you are trying to connect to callsenableFlutterDriverExtension()
when it starts up otherwise the Flutter Driver will not be able to connect to it. - BREAKING CHANGE Fixed spelling mistake of
targetAppWorkingDirectory
&flutterDriverMaxConnectionAttempts
inFlutterTestConfiguration
- BREAKING CHANGE reverse order of
driver
andfinder
inFlutterDriverUtils#isPresent
. This makes this method's arguments more consistent with all other instance methods in the class by includingdriver
first. expect
the presence ofThenExpectWidgetToBePresent
. If the widget was not present, the method would simply timeout and not report an error for the step.
- Updated to latest Gherkin library (see https://github.com/jonsamwell/dart_gherkin/blob/master/CHANGELOG.md#117---04032020) - this includes a breaking change to the
Hook
interface that will need to be updated if any of theScenario
level methods are implemented - Ensured the well known step
I tap the ".." button
scroll the element into view first
- Updated to latest Gherkin library (see https://github.com/jonsamwell/dart_gherkin/blob/master/CHANGELOG.md#1164---03022020)
- Update check to determine if any devices are connected to run tests against
- When the flag
verboseFlutterProcessLogs
was true Flutter driver was preemptively connecting to the app when it was not ready
- Added retry logic to the Flutter driver connect call to handle the seemingly random connection failures
- Ensured
AttachScreenshotOnFailedStepHook
cannot throw an unhandled exception causing the test run to stop - Added new well known step
When I tap the back button
which finds and taps the default page back button - Added a new well known step
Then I expect the widget 'notification' to be present within 2 seconds
which expects a widget with a given key to be present within n seconds - Updated Gherkin library version
- Increased the Flutter driver reconnection delay to try and overcome some driver to app connection issues on slower machines
- Ensured when the Flutter driver is closed it cannot throw an unhandled exception causing the test run the stop
- Updated Gherkin library version
WhenFillFieldStep
Ensure widget is scrolled into view before setting it's value- Fixed lint warnings
- When more than one connected device is present the device to run against was unknown causing a failure, now a message is logged saying the --device-id argument needs to be set
- Fixed issue where deprecated api warnings when build a flutter app were written to the stderr stream
- Migrated example to AndroidX
- Updated to latest Gherkin library (see https://github.com/jonsamwell/dart_gherkin/blob/master/CHANGELOG.md#115---05122019)
- Added configuration parameter
flutterBuildTimeout
to allow setting the app build wait timeout. Slower machines may need longer to build and start the Flutter app under test. - Now logging the flutter driver command used when the configuration setting
logFlutterProcessOutput
is true - Verbose logging for the underlying Flutter process can be enabled via the configuration setting
verboseFlutterProcessLogs
- Added
waitUntil
helper method to theFlutterDriverUtils
class that waits until a certain provided condition is true
- Added Flutter driver reporter - the Flutter Driver logs all messages (even non-error ones) to stderr and will cause the process to be marked as failed by a CI server because of this. So this reporter redirects the messages to the appropriate output stream (stdout / stderr).
- FlutterWorld - added missing
super.dispose()
call
- Fixed lint warnings
- Updated to latest Gherkin library
- Ensured Gradle build warnings do not output to
stderr
and cause tests runs to fail just because of build warnings
- Updated to latest Gherkin lib which implements languages - features can now be written in different languages / dialects! See https://cucumber.io/docs/gherkin/reference/#overview for supported dialects.
- Ensured the hook to take a screenshot
AttachScreenshotOnFailedStepHook
works for steps that error or timeout as well as fail. - Fix missing await in
FlutterDriverUtils
when getting text of a widget.
- Relaxed package constraints to accommodate older versions of Flutter
- Fixed package constraints so older versions of Flutter are compatible
- {string} placeholder variables can now contain whitespace characters [\n\r\t ]
- Tags are now inherited by children if required (see https://cucumber.io/docs/cucumber/api/#tag-inheritance)
- JSON reporter now adheres to the cucumber json reporter spec, I had to update the way tags and exceptions are handled
- Added ability to define the working directory for the app to run the tests against
- Updated to latest dart_gherkin lib which now has support for 'Scenario Outline' and 'Example' blocks
- Updated to latest dart_gherkin lib
- Added support to restart app during test
world.restartApp();
- Updated to latest dart_gherkin lib
- Fixed analysis suggestions
- Added ability to include a hook (see
AttachScreenshotOnFailedStepHook
) that takes a screenshot after a failed step. If using the json reporter it include the screenshot in the report that can then be used to generate a HTML report. - Updated to latest dart_gherkin lib
- Fixed analysis suggestions
- Fixed dependency conflicts
- Huge speed improvement when running tests by hot reloading (which clears the state) rather than restarting the app
- Added flag to determine if the application should be built prior to running tests
- Merged PR which allows for build flavor and device id to be specified thanks to @iqbalmineraltown for the PR
- Updated to latest v1 dart_gherkin lib
- Updated to rely on the abstracted Gherkin library 'https://github.com/jonsamwell/dart_gherkin' which now includes a JsonReporter
- Updated docs
- StepStartedMessage created which includes a table parameter that reporters receive when step is started thanks to @Holloweye for the PR
- Fixed package analysis error
- Fixes issue with table parameters not being given to step
- Added news hook that is called after the world for a scenario is created
- Ensured summary reporter reports failure reason
- Ensured well known Flutter step actions timeout before their parent step
- Updated example of custom parameters and how to use them
- Updated feature file glob pattern in readme examples
- Added a test run summary reporter
TestRunSummaryReporter
that logs an aggregated summary of the test run once all tests have run. - Fixed up glob issue in example project
- Added quick start steps in the example app readme
- Sorted out formatting of pre-defined steps
- Added more tests around
FlutterTestConfiguration
to ensure pre-defined steps are always added
- Added more pre-defined flutter step definitions
- Added more Flutter driver util methods to abstract common functionality like entering text into a control and tapping a button.
- Fixed up dependencies
- Initial working release