Интеграционные тесты работают нормально с флаттер-драйвом, но зависают при вводе текста в Firebase Test Lab

Для моего приложения настроен следующий тест входа:

      testWidgets('sign in with email and password', (WidgetTester tester) async {
  app.main();
  await tester.pumpAndSettle(Duration(seconds: 3));
  final emailInputFinder = find.byKey(Key('type-email'));
  final passwordInputFinder = find.byKey(Key('type-password'));
  final emailButtonFinder = find.byKey(Key('enter-email'));
  final passwordButtonFinder = find.byKey(Key('enter-password'));
  final dashboardFinder = find.byKey(Key('dashboard'));
  await tester.enterText(emailInputFinder, 'test.lab.user.01@...');
  await tester.pumpAndSettle(Duration(seconds: 3));
  await tester.tap(emailButtonFinder);
  await tester.pumpAndSettle(Duration(seconds: 3));
  await tester.enterText(passwordInputFinder, '...');
  await tester.pumpAndSettle(Duration(seconds: 3));
  await tester.tap(passwordButtonFinder);
  await tester.pumpAndSettle(Duration(seconds: 3));
  expect(dashboardFinder, findsOneWidget);
});

Жестко запрограммированная 3-секундная задержка не идеальна, но без нее я не могу запускать тесты с помощью драйвера.

Работать на моем локальном компьютере с драйвером нормально. Я использую команду

      flutter drive --driver=test_driver/integration_test.dart --target=integration_test/app_test.dart

Но когда я загружаю тест Espresso в Firebase Test Lab и просматриваю видео, загружается экран входа в систему, но первая команда, похоже, не действует. В текстовое поле ничего не добавляется, и тест просто истекает.

Я пробовал различные комбинации tester.tap() и tester.showKeyboard(), но пока ничего не выходит.

Как я могу получить enterText() правильно работать в среде Espresso, поддерживаемой TestLab?

1 ответ

Попробуйте позвонить:

        final binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized() as IntegrationTestWidgetsFlutterBinding;

// Necessary for being able to enterText when not in debug mode 
  binding.testTextInput.register();

В репозитории флаттера есть проблема с документированием этого.В основном, если вы не находитесь в режиме отладки, вам нужно позвонить binding.testTextInput.register()Для того чтобы tester.enterTextработать.

Другие вопросы по тегам