patrol 0.6.8 icon indicating copy to clipboard operation
patrol: ^0.6.8 copied to clipboard

Simple yet powerful Flutter-native UI testing framework eliminating limitations of flutter_test, integration_test, and flutter_driver.

patrol #

patrol on pub.dev codestyle

patrol package builds on top of flutter_test and integration_test to make it easy to control the native UI from Dart test code.

It also provides a new custom finder system to make Flutter widget tests more concise and understandable, and writing them – faster and more fun.

It can be used on its own or with patrol_cli.

Installation #

$ dart pub add patrol

Accessing native platform features #

// example/integration_test/example_test.dart
import 'package:example/main.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:patrol/patrol.dart';

void main() {
  patrolTest(
    nativeAutomation: true,
    'counter state is the same after going to Home and going back',
    ($) async {
      await $.pumpWidgetAndSettle(const MyApp());

      await $(FloatingActionButton).tap();
      expect($(#counterText).text, '1');

      await $.native.pressHome();
      await $.native.pressDoubleRecentApps();

      expect($(#counterText).text, '1');
      await $(FloatingActionButton).tap();
      expect($(#counterText).text, '2');

      await $.native.openNotifications();
      await $.native.pressBack();
    },
  );
}

Custom finders #

import 'package:example/main.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:patrol/patrol.dart';

void main() {
  patrolTest(
    'logs in successfully',
    ($) async {
      await $.pumpWidgetAndSettle(const MyApp());

      await $(#emailInput).enterText('user@leancode.co');
      await $(#passwordInput).enterText('ny4ncat');

      // Find widget with text 'Log in' which is a descendant of widget with key
      // box1 which is a descendant of a Scaffold widget and tap on it.
      await $(Scaffold).$(#box1).$('Log in').tap();

      // Selects all Scrollables which have Text descendant
      $(Scrollable).containing(Text);

      // Selects all Scrollables which have a Button descendant which has a Text descendant
      $(Scrollable).containing($(Button).containing(Text));

      // Selects all Scrollables which have a Button descendant and a Text descendant
      $(Scrollable).containing(Button).containing(Text);
    },
  );
}
67
likes
140
pub points
65%
popularity

Publisher

verified publisher iconleancode.co

Simple yet powerful Flutter-native UI testing framework eliminating limitations of flutter_test, integration_test, and flutter_driver.

Homepage
Repository (GitHub)
View/report issues

Documentation

API reference

License

Icon for licenses.Apache-2.0 (LICENSE)

Dependencies

flutter, flutter_test, freezed_annotation, grpc, http, integration_test, json_annotation, meta, protobuf

More

Packages that depend on patrol