FlutterDriver: Flutter Driver extension is taking a long time to become available
Asked Answered
R

1

9

I'm trying to run flutter integration tests following the instructions provided in the webpage: https://flutter.dev/docs/cookbook/testing/integration/introduction but when trying to execute using an iOS device, it always fails with a flutterdriver timeout, but if I'm executing the same piece of code using an android device it runs successfully.

The command executed is:

flutter driver --target=test_driver/app.dart

and (only in iOS), the error shown is the following:

...
flutter: Observatory listening on http://127.0.0.1:49605/Jh_J7boSKBk=/  
Installing and launching...                                        22.5s
[info ] FlutterDriver: Connecting to Flutter application at http://127.0.0.1:1043/Jh_J7boSKBk=/
[trace] FlutterDriver: Isolate found with number: 589047572
[trace] FlutterDriver: Isolate is paused at start.
[trace] FlutterDriver: Attempting to resume isolate
[trace] FlutterDriver: Waiting for service extension
flutter: main dev
[warning] FlutterDriver: Flutter Driver extension is taking a long time to become available. Ensure your test app (often "lib/main.dart") imports "package:flutter_driver/driver_extension.dart" and calls enableFlutterDriverExtension() as the first call in main().

it looks like that when it is executed in iOS, it is completely ignoring the specified target and it is trying to run directly lib/main.dart file but, WHY?

What I mean for following webpage instructions is using 2 files for test: test_driver/app.dart and test_driver/app_test.dart

test_driver/app.dart

import 'package:flutter_driver/driver_extension.dart';
import 'package:my_app/main.dart' as app;

void main() async {
  // This line enables the extension
  await enableFlutterDriverExtension();

  // Call the `main()` function of your app or call `runApp` with any widget you
  // are interested in testing.
  await app.main();
}

test_driver/app_test.dart

import 'package:flutter_driver/flutter_driver.dart';
import 'package:test/test.dart';

void main() {
  group('end-to-end test', () {
    FlutterDriver driver;

    setUpAll(() async {
      // Connect to a running Flutter application instance.
      driver = await FlutterDriver.connect();
    });

    tearDownAll(() async {
      if (driver != null)
        driver.close();
    });

    test('whatever', () async {
       //whatever
    });
  });
}

As it was commented here: #17184, it could be fixed introducing the enableFlutterDriverExtension() inside main.dart, but I would rather not write anything extra inside the application code.

Is there any possibility to fix it using another approach?

Thanks

Rimma answered 7/6, 2019 at 6:32 Comment(2)
I just ran the test on iOS and didn't get any timeout error and don't see anything wrong with your test setup. Check this link in which someone mentioned issue was related to xcode's build configuration. github.com/flutter/flutter/issues/26968 . hope it helps.Ass
Thanks!! the fix from the other issue is a better workaround for me! thanks again :)Rimma
S
2

I've followed the steps on the docs for writing integration tests and it works fine on both Flutter stable(version 1.22.5) and master(version 1.26.0-2.0.pre.281) channels. While the command in the docs demonstrates the use of flutter drive, using flutter driver seems to run fine as well in my tests.

Setting that aside, even if I'm unable to replicate the issue locally, it seems that the issue has been resolved by following the workaround mentioned in the GitHub issue thread per checking the comments.

Syncopate answered 14/1, 2021 at 18:52 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.