flutter_finder_usercentric 1.0.0-beta.1 copy "flutter_finder_usercentric: ^1.0.0-beta.1" to clipboard
flutter_finder_usercentric: ^1.0.0-beta.1 copied to clipboard

Flutter usercentric finder provides flutter finder based on usercentric approach and ready to use during test

example/example.dart

import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter_finder_usercentric/finder.dart';

class TestApp extends StatelessWidget {
  TestApp({super.key});
  final controller = TextEditingController();
  final double _currentSliderValue = 20;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Test App',
      home: Scaffold(
        body: Column(
          children: [
            TextField(
                key: const Key('SimpleTextFieldKey'),
                controller: controller,
                decoration: const InputDecoration(
                  border: OutlineInputBorder(),
                  hintText: 'Simple TextField',
                )),
            TextField(
                key: const Key('AnotherSimpleTextFieldKey'),
                controller: controller,
                decoration: const InputDecoration(
                  border: OutlineInputBorder(),
                  hintText: 'Another Simple TextField',
                )),
            MergeSemantics(
              key: const Key("SimpleSliderKey"),
              child: Row(
                children: [
                  const Text("Simple slider"),
                  Slider(
                    value: _currentSliderValue,
                    max: 100,
                    divisions: 5,
                    label: _currentSliderValue.round().toString(),
                    onChanged: (double value) {},
                  )
                ],
              ),
            ),
            FloatingActionButton(
              key: const Key('SimpleFloatingActionButtonTooltipKey'),
              tooltip: 'SimpleFloatingActionButtonTooltip',
              onPressed: () {},
            ),
            ElevatedButton(
                onPressed: () {},
                key: const Key('SimpleElevatedButtonKey'),
                child: const Text('SimpleElevatedButtonText')),
            Tooltip(
                message: "ElevatedButtonWithTooltip",
                child: ElevatedButton(
                    onPressed: () {},
                    key: const Key('ElevatedButtonWithTooltipKey'),
                    child: const Text('ElevatedButtonWithTooltipText')))
          ],
        ),
      ),
    );
  }
}

void main() {
  testWidgets('byAccessibleName should return element when text content found',
      (tester) async {
    await tester.pumpWidget(TestApp());

    var finderByAccessibleName =
        find.byAccessibleName("SimpleElevatedButtonText");
    expect(finderByAccessibleName, findsOneWidget);
    expectKey(
        finderByAccessibleName, "ElevatedButton", "SimpleElevatedButtonKey");
  });

  testWidgets('byAccessibleName should return element when tooltip found',
      (tester) async {
    await tester.pumpWidget(TestApp());

    var finderByAccessibleName =
        find.byAccessibleName("ElevatedButtonWithTooltip");
    expect(finderByAccessibleName, findsOneWidget);
    expect((tester.widget(finderByAccessibleName) as Tooltip).message,
        "ElevatedButtonWithTooltip");
  });

  testWidgets('byAccessibleName should return empty when no element found',
      (tester) async {
    await tester.pumpWidget(TestApp());

    var finderByAccessibleName = find.byAccessibleName("NonExisting");
    expect(finderByAccessibleName, findsNothing);
  });

  testWidgets('byAccessibleRoleAndName should return ElevatedButton when found',
      (tester) async {
    await tester.pumpWidget(TestApp());

    var finderByAccessibleRoleAndName = find.byAccessibleRoleAndName(
        tester, AccessibleRole.button, "SimpleElevatedButtonText");
    expect(finderByAccessibleRoleAndName, findsOneWidget);
    expectKey(finderByAccessibleRoleAndName, "ElevatedButton",
        "SimpleElevatedButtonKey");
  });

  testWidgets('byAccessibleRoleAndName should return TextField when found',
      (tester) async {
    await tester.pumpWidget(TestApp());

    var finderByAccessibleRoleAndName = find.byAccessibleRoleAndName(
        tester, AccessibleRole.textField, "Simple TextField");
    expect(finderByAccessibleRoleAndName, findsOneWidget);
    expectKey(finderByAccessibleRoleAndName, "TextField", "SimpleTextFieldKey");
  });

  testWidgets('byAccessibleRoleAndName should return Slider when found',
      (tester) async {
    await tester.pumpWidget(TestApp());
    debugDumpSemanticsTree();

    var finderByAccessibleRoleAndName = find.byAccessibleRoleAndName(
        tester, AccessibleRole.slider, "Simple slider");
    expect(finderByAccessibleRoleAndName, findsOneWidget);
    expect(finderByAccessibleRoleAndName.found.first.widget.key,
        const Key("SimpleSliderKey"));
  });

  testWidgets(
      'byAccessibleRoleAndName should return empty when accessible role doesn\'t match with existing text',
      (tester) async {
    await tester.pumpWidget(TestApp());

    var finderByAccessibleRoleAndName = find.byAccessibleRoleAndName(
        tester, AccessibleRole.textField, "SimpleElevatedButtonText");
    expect(finderByAccessibleRoleAndName, findsNothing);
  });

  testWidgets(
      'byAccessibleRoleAndName should return element for floatingButton',
      (tester) async {
    await tester.pumpWidget(TestApp());

    var finderByAccessibleRoleAndName = find.byAccessibleRoleAndName(
        tester, AccessibleRole.button, "SimpleFloatingActionButtonTooltip");
    expect(finderByAccessibleRoleAndName, findsOneWidget);
    expect((tester.widget(finderByAccessibleRoleAndName) as Tooltip).message,
        "SimpleFloatingActionButtonTooltip");
  });

  testWidgets(
      'byAccessibleRoleAndName should return empty when accessible role doesn\'t match with existing tooltip',
      (tester) async {
    await tester.pumpWidget(TestApp());

    var finderByAccessibleRoleAndName = find.byAccessibleRoleAndName(
        tester, AccessibleRole.textField, "SimpleFloatingActionButtonTooltip");
    expect(finderByAccessibleRoleAndName, findsNothing);
  });

  testWidgets(
      'byAccessibleRoleAndName should return empty when text button not found',
      (tester) async {
    await tester.pumpWidget(TestApp());

    var finderByAccessibleRoleAndName = find.byAccessibleRoleAndName(
        tester, AccessibleRole.button, "NonExisting");
    expect(finderByAccessibleRoleAndName, findsNothing);
  });
}

void expectKey(Finder finder, String type, String key) {
  expect(
      find.ancestor(
          of: finder,
          matching: find.byWidgetPredicate((widget) =>
              widget.runtimeType.toString() == type && widget.key == Key(key))),
      findsOneWidget);
}
3
likes
140
points
425
downloads

Publisher

verified publisherkemitech.io

Weekly Downloads

Flutter usercentric finder provides flutter finder based on usercentric approach and ready to use during test

Homepage
Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter, flutter_test

More

Packages that depend on flutter_finder_usercentric