2

我为我的应用设置了以下登录测试:

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 测试实验室并查看视频时,登录屏幕会加载,但第一个enterText()命令似乎没有效果。文本字段中没有添加任何内容,并且测试只是超时。

我尝试了 and 的各种组合tester.tap()tester.showKeyboard()但到目前为止,没有任何结果。

如何enterText()在 TestLab 支持的 Espresso 环境中正常工作?

4

1 回答 1

1

尝试调用binding.testTextInput.register()

  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工作。

于 2022-02-08T17:43:58.697 回答