Интеграционные тесты работают нормально с флаттер-драйвом, но зависают при вводе текста в 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
работать.